Запрос подстановочных знаков Solr с пробелом и синонимом

Эта проблема выглядит следующим образом: запрос с подстановочными знаками Solr с пробелами У меня есть запрос с подстановочными знаками, который выглядит что-то типа:

q=location:los a*

Я бы хотел, чтобы это соответствовало «лос-анджелес» и «лос-альтос». Такой запрос:

q=location:los\ a*

Работает нормально, но если у меня есть логика синонимов: (synonym.txt)

los,las

И используйте "los l*" для соответствия "las lu". Кажется, это не работает. Как я могу это сделать?

Тип файла и конфигурация файла:

<fieldType name="ngram" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="0" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="0" catenateAll="0" splitOnNumerics="0" preserveOriginal="1"/> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonym.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="0" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnNumerics="0" preserveOriginal="1"/> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>

<field name="location" type="ngram" indexed="true" stored="false"/>


person Chao Jiang    schedule 08.11.2016    source источник


Ответы (2)


Вы использовали solr.SynonymFilterFactory для индексации, а не для анализатора запросов, поэтому

когда вы ищете "los l*", он ищет термины, начинающиеся с los, а не с "las". использовать анализатор для запроса

Добавьте эту строку в свой анализатор запросов

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  

Надеюсь, это работает

person Vinod    schedule 08.11.2016

Похоже, это проблема версии. Я использую Solr 4.0 в своем проекте, но когда я обновляю версию Solr до 5.4.1, логика синонимов работает нормально.

Я не менял анализатор запросов. Это для особых требований.

person Chao Jiang    schedule 09.02.2017