Почему запрос solr dismax возвращает пустой набор результатов?

Я пытаюсь получить результаты поиска произвольного текста из индексированных данных с помощью solr 4.5, используя Dismax Query Parser но никаких результатов и ошибок с такими простыми запросами, как этот:

http://localhost:9999/solr/products/select?q=cuir&qf=text_fr&defType=dismax

И эти документы существуют в индексе:

{ id: 1, label: "Sac à main en cuir" }
{ id: 2, label: "Sac à main en cuir rouge" }

Моя схема.xml:

..
<field name="id" type="int" indexed="true" stored="true" required="true" /> 
<field name="label" type="string" indexed="true" stored="true" required="true" />
...
<copyField source="label" dest="label_fr"/>
<dynamicField name="*_fr" type="text_fr" indexed="true" stored="false" />
...
<fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
  <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_french.txt" enablePositionIncrements="true" />
    <filter class="solr.SnowballPorterFilterFactory" language="French"/>
    <filter class="solr.CollationKeyFilterFactory" language="fr" strength="primary" />
  </analyzer>
</fieldType>

и в solrconfig.xml

...
<requestHandler name="/select" class="solr.SearchHandler">
  <lst name="defaults">
    <str name="echoParams">explicit</str>
    <int name="rows">10</int>
    <str name="defType">dismax</str>
  </lst>
 ...

Итак, есть идеи, что не так? Почему нет результатов?


person edigu    schedule 30.10.2013    source источник
comment
Вы можете использовать инструмент анализа, который входит в состав Solr, и выполнить отладку. Вы можете получить к нему доступ по адресу http://HOST:PORT/solr/#/CORE/analysis   -  person arun    schedule 31.10.2013


Ответы (2)


KeywordTokenizer обрабатывает всю вашу строку индекса как один токен, поэтому он не будет соответствовать запросу из одного слова.

Вместо этого вы можете попробовать StandardTokenizerFactory, WhitespaceTokenizerFactory или WordDelimiterFilter.

person taleodor    schedule 03.11.2013

В приведенной выше схеме вы определили поле «метка» как «строка», и оно обрабатывает его как одну строку.

Вы должны изменить fieldType на:

<field name="label" type="text_general" indexed="true" stored="true" required="true" />

И, как упоминалось выше, для text_general fieldType по умолчанию настроен StandardTokenizerFactory.

Он будет обрабатывать поле как текст (или строки), и вы сможете выполнять по нему полнотекстовый поиск.

Примечание. FieldType String удобен в случае фасетного поиска для определенной категории, в этом случае вы должны использовать String для получения лучших результатов. или вы можете сделать CopyField.

person Murtaza Kanchwala    schedule 11.05.2016