繁体   English   中英

使用Dismax搜索多词索引词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM