0

私は 3.x から 4.x に移行しており、いくつかのクエリを実行して、すべてが以前と同じように機能することを確認しています。ただし、「galaxy s3」というクエリの結果ははるかに少ないことがわかりました。3.x では numFound=1628、4.x では numFound=70 です。

関連するスキーマ部分は次のとおりです。

<fieldtype name="text_pt" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
   <analyzer type="index">
       <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="-" replacement="IIIHYPHENIII"/>
       <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.PatternReplaceFilterFactory" pattern="IIIHYPHENIII" replacement="-"/>
       <filter class="solr.ASCIIFoldingFilterFactory" />
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" preserveOriginal="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.StopFilterFactory" ignoreCase="false" words="portugueseStopWords.txt"/>
       <filter class="solr.BrazilianStemFilterFactory"/>
       <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
   </analyzer>
   <analyzer type="query">
       <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="-" replacement="IIIHYPHENIII"/>
       <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.PatternReplaceFilterFactory" pattern="IIIHYPHENIII" replacement="-"/>
       <filter class="solr.ASCIIFoldingFilterFactory" />           
       <filter class="solr.SynonymFilterFactory" ignoreCase="true" synonyms="portugueseSynonyms.txt" expand="true"/>
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" preserveOriginal="1" catenateNumbers="0" catenateAll="0" protected="protwords.txt"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.StopFilterFactory" ignoreCase="false" words="portugueseStopWords.txt"/>
       <filter class="solr.BrazilianStemFilterFactory"/>
       <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
   </analyzer>
</fieldtype>

このクエリに含まれるシノニムは次のとおりです。

siii, s3
galaxy, galax

デフォルトの検索演算子は AND (両方のバージョンで、4.x で非推奨であっても) で、デバッグの出力は次のとおりです。

SOLR 3.x

<str name="parsedquery">+(title_search_pt:galaxy title_search_pt:galax) 
+MultiPhraseQuery(title_search_pt:"(sii s3 s) 3")</str>

SOLR 4.x

<str name="parsedquery">+((title_search_pt:galaxy title_search_pt:galax)/no_coord) 
+(+title_search_pt:sii +title_search_pt:s3 +title_search_pt:s +title_search_pt:3)/str>

奇妙なことに、「galaxy s3」のような結果は返されません。これはデバッグ クエリです。

必須句に一致しない (+title_search_pt:sii +title_search_pt:s3 +title_search_pt:s +title_search_pt:3)
(NON-MATCH) 必須/禁止句の条件を満たさない、必須句に一致しない ( title_search_pt:sii)
(NON-MATCH) 一致する用語がない
(MATCH) weight(title_search_pt:s3 in 1834535)
(MATCH) weight(title_search_pt:s in 1834535)
(MATCH) weight(title_search_pt:3 in 1834535)

s および s3 と OR する必要がある場合、 sii はどのように必要ですか?

分析出力は、sii がトークンの位置 2 を持っていることを示しています。

galaxy  sii 3
galax   s3
        s
4

2 に答える 2