Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Demax搜索多词索引词_Java_Solr_Lucene_Dismax - Fatal编程技术网

Java 使用Demax搜索多词索引词

Java 使用Demax搜索多词索引词,java,solr,lucene,dismax,Java,Solr,Lucene,Dismax,我的solr模式如下(仅重要部分): 在namedentities中,我索引了多个词,如:“迭戈·阿尔贝托·米利托”、“迭戈·阿曼多·马拉多纳”。我尝试在这两个字段中搜索,并使用一个Demax查询以不同的方式增强它们 但尝试此查询时: localhost:8080/solr/select/?q=“迭戈·阿曼多·马拉多纳”&defType=dismax&qf=namedentities^100 bagofwords^1&fl=*,score&debugQuery=true&mm=0

我的solr模式如下(仅重要部分):


在namedentities中,我索引了多个词,如:“迭戈·阿尔贝托·米利托”、“迭戈·阿曼多·马拉多纳”。我尝试在这两个字段中搜索,并使用一个Demax查询以不同的方式增强它们

但尝试此查询时: localhost:8080/solr/select/?q=“迭戈·阿曼多·马拉多纳”&defType=dismax&qf=namedentities^100 bagofwords^1&fl=*,score&debugQuery=true&mm=0

索尔什么也没找到。也许我不明白“符号”的正确用法

我也不明白solr wiki的说法:

“在Solr 1.4及之前的版本中,如果需要q.op=OR的等效值,则基本上应将mm=0,如果需要q.op=and的等效值,则应将mm=100%。在3.x和trunk中,mm的默认值由q.op参数指定(q.op=and=>mm=100%;q.op=OR=>mm=0%)。请记住,默认运算符受schema.xml条目的影响。在旧版本的Solr中,默认值为100%(所有子句必须匹配)

假设在我的模式中defaultOperator是,或者为什么在没有设置mm=0的情况下,我得到了默认的mm值100


提前感谢!

在上面的查询字符串周围加上引号将强制执行短语查询。这意味着只考虑精确匹配。删除它们,替换为paren,并使用pf、pf2和pf3参数进行实验,以增加更长的匹配短语。

解析查询的调试版本的输出也将非常有用。我怀疑,由于您标记了字段,您的精确搜索将不匹配-因为当您将其括在引号中时,两个条目都不是您要搜索的字符串。谢谢。我终于发现引号并不意味着精确匹配,而是在寻找一个短语:连续字符串,所以我更改了架构分析器。但没有办法处理使用多单词标记…所以我将索引放入单个单词并搜索短语
<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>