2015-08-25 1 views
0

Я использую WordDelimiterFilterFactory для разделения слов, которые имеют числа в токенах solr. Например, слово Php5 разделяется на два токена «PHP», «5». При поиске запрос, выполняемый SOLR, равен q = «php» и q = «5». Но этот запрос находит даже результаты только с «5». Я хочу найти документы с «PHP5» или «PHP 5».SOLR WordDelimiterFilterFactory

Если у кого-то есть идея обойти это, пожалуйста.

Надеюсь, что это ясно.

Thank's.

+0

<фильтр класса = "solr.WordDelimiterFilterFactory" generateWordParts = "0" generateNum berParts = "1" catenateWords = "0" catenateNumbers = "0" preserveOriginal = "1" catenateAll = "0" splitOnCaseChange = "0" /> mark generateNumberParts = "0". Это не разделит слова .. –

+0

ok Я собираюсь попробовать с этой конфигурацией. Спасибо :) – radamou

ответ

0

Этот фильтр разбивает токены на разделителях слов.

В вашем случае вы можете выбрать splitOnNumerics = «0», поэтому он не разливается по номерам.

splitOnNumerics: (целое число, по умолчанию 1) Если 0, не расщепляются слова на переходах из альфа к числовому: "FemBot3000" -> "Fem", "Bot3000"

правила определения разделителей определяются в приведенной ниже ссылке

https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-WordDelimiterFilter

0

Вы должны получить Solr, в дополнение к индексации «php5», индексировать «PHP 5» в качестве единственного маркера. Таким образом, поиск по «php 5» будет соответствовать, но поиск «blah 5», например, не будет.

Единственный способ, которым я смог заставить это работать, - использовать Auto Phrasing filter by lucid work s.

<analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
     /> 
     <filter class="com.lucidworks.analysis.AutoPhrasingTokenFilterFactory" phrases="autophrases.txt" includeTokens="true" replaceWhitespaceWith="_" /> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" /> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
     /> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 

synonyms.txt

php5,php_5 

protwords.txt (так разделитель не сломать)

php5,php_5 

Вы также должны изменить анализатор запросов использовать осознанный анализатор ,

solrconfig.xml

<queryParser name="autophrasingParser" class="com.lucidworks.analysis.AutoPhrasingQParserPlugin" > 
    <str name="phrases">autophrases.txt</str> 
    <str name="replaceWhitespaceWith">_</str> 
    <str name="ignoreCase">false</str> 
</queryParser> 
<requestHandler name="/searchp" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">10</int> 
     <str name="df">Keywords</str> 
     <str name="defType">autophrasingParser</str> 
    </lst> 
</requestHandler> 

autophrases.txt

php 5 

Фильтр можно найти здесь: https://github.com/LucidWorks/auto-phrase-tokenfilter

Эта статья была также очень полезна: http://lucidworks.com/2014/07/02/automatic-phrase-tokenization-improving-lucene-search-precision-by-more-precise-linguistic-analysis/

Смежные вопросы