[英]Using dismax to search for multiword indexed terms
我的Solr模式如下(仅重要部分):
<fieldType name="bagofwords_expertfinding" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!-- remove letters repeated more than two times -->
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9-/_,\.]+$" replacement="" replace="all"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^.*(([aA-zZ])\\2)\\2+.*$" replacement=""/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="100"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9-/_,\.]+$" replacement="" replace="all"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="100"/>
</analyzer>
</fieldType>
<fieldType name="namedentities_expertfinding" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!-- remove letters repeated more than two times -->
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\s," replacement=","/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern=",\s" replacement=","/>
<tokenizer class="solr.PatternTokenizerFactory" pattern="," />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9-/_,\.]+$" replacement="" replace="all"/>
<filter class="solr.LengthFilterFactory" min="3" max="100"/>
</analyzer>
</fieldType>
在命名实体中,我已经索引了多个单词,例如:“ diego alberto milito”,“ diego armando maradona”。 我正在尝试在两个字段中进行搜索,从而通过dismax查询以不同的方式增强它们。
但是请尝试使用以下查询:localhost:8080 / solr / select /?q =“ diego armando maradona”&defType = dismax&qf = namedentities ^ 100 bagofwords ^ 1&fl = *,score&debugQuery = true&mm = 0
solr什么也没找到。 也许我不明白“”符号的正确用法。
我不明白solr wiki也给出了这个:
“在Solr 1.4和更低版本中,如果要等价于q.op = OR,则应基本设置mm = 0;如果要等价于q.op = AND,则应将mm = 100%设置。在3.x和主干中mm的默认值由q.op参数决定(q.op = AND => mm = 100%; q.op = OR => mm = 0%)请记住,默认运算符受您的模式影响。 xml条目。在旧版本的Solr中,默认值为100%(所有子句必须匹配)”
并考虑到在我的架构中defaultOperator是OR或为什么在不设置mm = 0的情况下获得默认的mm值100。
提前致谢!
在上面的查询字符串两边加上引号会强制执行短语查询。 这意味着只考虑完全匹配。 删除它们,替换为括号,并尝试使用pf和pf2和pf3参数来增强更长的匹配短语。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.