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

时间:2016-11-08 08:39:02

标签: solr whitespace synonym

这个问题是这样的:Solr wildcard query with whitespace 我有一个通配符查询,如下所示:

q=location:los a*

我想要它匹配“洛杉矶”和“洛杉矶alt”。像:

这样的查询

q=location:los\ a*

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

los,las

并使用“los l *”来匹配“las lu”。看起来不行。我怎么能这样做?

fileType和文件配置:

<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"/>

2 个答案:

答案 0 :(得分:0)

您使用solr.SynonymFilterFactory进行索引而不是查询分析器

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

将此行添加到查询分析器

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

希望这有效

答案 1 :(得分:0)

似乎这是一个版本问题。我在我的项目中使用Solr 4.0,但是当我将Solr版本升级到5.4.1时,同义词逻辑工作正常。

我还没有改变查询分析器。这是特殊要求。