这个问题是这样的: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"/>
答案 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时,同义词逻辑工作正常。
我还没有改变查询分析器。这是特殊要求。