アプリケーションで Solr4.2 を使用しています。テキスト フィールドの定義を のSolr.PatternTokenizerFactory
代わりにを使用するようにSolr.StandardTokenizerFactory
変更し、スキーマの定義を次のように変更しました。
<fieldType name="text_token" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[^a-zA-Z0-9&\-']|\d{0,4}s:" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[^a-zA-Z0-9&\-']|\d{0,4}s:" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_extra_query.txt" enablePositionIncrements="false" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
これを行うと、あいまい検索が以前のように正しく機能しないようです。
検索語で検索しています:worde~1
検索すると、以前は約 300 件のレコードが返されていましたが、現在は 5 件しか返されません。
WORD
これらの 5 つのレコードには、、、WORDS
のような単語が含まれていますWORSE
。しかし、そのような単語を含む他のドキュメントは返されません。
何が問題になるかわかりません。
誰かがそれを機能させるのを手伝ってくれますか?
編集 :
正規表現は、アルファベット、数字、「&」、「-」、および ns: を除く任意のものでトークンを分割します (n は 0 から 9999 までの数値、たとえば 4323s: )。
たとえば、私のテキストが以下のようなものだとしましょう。
this is nice* day & sun 53s: is risen.
次に、パターントークナイザーはトークンを次のように作成する必要があります
this is nice day & sun is risen
(すべての単語は diff. token です)
パターンは異なるテキストでうまく機能しているように見えますが、
あいまい検索についてもworde~1
、patterntokenizer factory の結果の戻り値を確認しました。「WORDS」、「WORDED....」などの句読点があります。
もう 1 つの奇妙な点は、すべての結果が大文字であり、小文字の結果を含む結果が表示されないことです。ただし、大文字のすべての結果も返すわけではありません。