2

SOLR 3.5 インスタンスに次のアナライザー チェーンがあります (ただし、luceneMatch バージョンは設定されていません)。

<fieldtype name="text_pt" class="solr.TextField" 
           positionIncrementGap="100" autoGeneratePhraseQueries="false">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory" protected="protwords.txt" />
        <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">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory" protected="protwords.txt" />
        <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>

autoGeneratePhraseQueries="false"があることに注目してください。
どうやら、これにより、クエリ パーサーが句読点記号を見つけるときにフレーズ クエリを生成するのを防ぐ必要があります。しかし、これは起こっていません。

&debugQuery の出力を見てください。

<str name="querystring">title_search_pt:(looking,for peugeot)</str>
<str name="parsedquery">+PhraseQuery(title_search_pt:"looking for") +title_search_pt:peugeot</str>

ご覧のとおり、コンマは正しくトークン化されていますが、フレーズ クエリになってしまいます。多くの人が検索用にテキストをコピーして貼り付けます (句読点を使用)。私の論理では、句読点は「それを使用してフレーズ クエリを実行する」という意味ではありません。

これを無効/防止するにはどうすればよいですか?

StandardTokenizer はドットとコンマを完全に理解し、必要な場合にのみ分割します (ホスト名、数字などを保持する)。そのため、重要な情報を失うことになるため、SOLR をクエリする前にクライアントのすべての句読点を置き換えることはオプションではありません。

ありがとう

4

0 に答える 0