带有空格和同义词的 Solr 通配符查询

Solr wildcard query with whitespace and synonym

这个问题是这样的:Solr wildcard query with whitespace 我有一个看起来像这样的通配符查询:

q=location:los a*

我希望它匹配 "los angeles" 和 "los altos"。查询如:

q=location:los\ a*

工作正常,但如果我有同义词逻辑:(synonym.txt)

los,las

然后用"los l*"匹配"las lu"。好像不行work.How我可以这样做吗?

文件类型和文件配置:

<fieldType name="ngram" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="0" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="0" catenateAll="0" splitOnNumerics="0" preserveOriginal="1"/> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonym.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="0" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnNumerics="0" preserveOriginal="1"/> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>

<field name="location" type="ngram" indexed="true" stored="false"/>

您将 solr.SynonymFilterFactory 用于索引而非查询分析器,因此

当您搜索 "los l*" 时,它会查找以 los 而非 "las" 开头的字词。 使用分析器进行查询

将此行添加到您的查询分析器

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  

希望这有效

看来是版本问题。我在项目中使用的是Solr 4.0,但是当我将Solr版本升级到5.4.1时,同义词逻辑正常。

我没有更改查询分析器。是为了特殊要求。