SOLR生成关于标点符号的短语查询

时间:2013-03-09 18:39:18

标签: solr lucene

我的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”
显然,这应该可以防止查询解析器在查找标点符号时生成短语查询。然而,这种情况并没有发生。

查看&amp; 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之前替换客户端上的所有标点符号不是一种选择,因为我将丢失一些重要信息。

由于

0 个答案:

没有答案