PySolr seaching с несколькими значениями для одного поля, условие 'ИЛИ' в solr
Мои коды PySolr ниже
filter_queries = []
facet_fields = []
for key, value in request.GET._iterlists():
if(key != 'Rows' and key != 'Sort' and key != 'Facet' and key != 'FacetFields' ):
filter_queries.append(key + ':' + request.GET[key])
else:
if(key == 'Rows'):
rows = request.GET['Rows']
if(key == 'Sort'):
sort = request.GET['Sort']
if(key == 'Facet'):
facet = request.GET['Facet']
if(key == 'FacetFields'):
facet_fields = request.GET['FacetFields'].split(",")
if(key == 'Start'):
start = request.GET['Start']
params = {
'fq': filter_queries,
'facet': facet,
'facet.field': facet_fields,
'rows': rows,
'sort': sort,
'start':start,
}
try:
results = solr.search(q='*', **params)
documents = json.dumps(results, default=lambda o: o.__dict__)
except Exception as e:
# handles SOLR invalid queries
documents = json.dumps({'error': 1, 'reason': str(e)})
return HttpResponse(documents)
Когда я прохожу ?CityId = 3156
он работает нормально, но теперь мне нужно передать два значения для CityId(например, как URL-адрес запроса Solr ?q=CityId:3156+OR+CityId:2278
) как этого добиться в PySolr?
2 ответа
Я использую AJAX для запросов, но синтаксис одинаков во всех API для Solr. если вы хотите сделать несколько запросов к одному полю, вы должны использовать круглые скобки следующим образом:
CityId: (3156 + или +2278)
Это должно делать свое дело.
Вы можете просто написать запрос, как
CityId:(3156+ или +2278)
Или вы можете просто написать свой запрос как обычно, установить параметр q.op в ваших параметрах
query = 'CityId: 3156 2278'
params = {
'fq': ...,
'facet': ...,
'facet.field':...,
'rows': ...,
'sort': ...,
'start':...,
'q.op': 'OR'
}