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