стог сена поиск по всем полям - PullRequest
1 голос
/ 16 июня 2011

У меня есть поисковая система solr с несколькими полями, и я хочу иметь возможность поиска по ВСЕМ полям.

Я могу сделать .filter(content='string'), но это только поиск в тех полях, которые есть в document=True

РЕДАКТИРОВАТЬ Кроме того, некоторые из полей, отличных от document=True, имеют различные фильтры / токенизаторы, поэтому я предполагаю, что не будет работать с их добавлением в одно поле ...

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Может быть, вы можете создать второе поле с 'use_template' и шаблоном, отображающим ВСЕ поля.

Я никогда не пытался сделать это, но это хороший способ сделать это для меня.

РЕДАКТИРОВАТЬ с момента комментария OP:

Тогда лучше всего выбрать любой подкласс SearchQueryset, чтобы добавить метод или создать функцию, которая будет зацикливать все поля в вашем SearchIndex и делать что-то вроде:

qs = SearchQuerySet().filter(content=query)
for field in fieldlist:
   qs = qs.filter_or(**{'field':query})

Понятия не имею, работает ли это вообще, но стоит попробовать.

1 голос
/ 13 сентября 2011

@ neolaser: Я думаю, что вы можете достичь с помощью поиска DisMax.Это позволяет осуществлять поиск по нескольким полям и указывать значение усиления для каждого из них.Для более подробной информации:

http://wiki.apache.org/solr/SolrRelevancyFAQ

http://wiki.apache.org/solr/DisMaxQParserPlugin

1 голос
/ 16 июня 2011

Вы можете выполнить поиск по всем покупаемым полям, включая их все, в параметре фильтрационного запроса или назвав их в строке запроса (например, если вам нужно выполнить поиск по ключевому слову «search» ((field_1: ключевое слово) ИЛИ (field_2: ключевое слово) ИЛИ (field_3: ключевое слово)) "вместо).

Тем не менее, обычно лучше иметь специальное поле, объединяющее все остальные, необходимые для поиска и поиска в этом единственном поле. Вы можете настроить copyfield в своей схеме, чтобы этот контент генерировался автоматически при индексации вашего документа.

...