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