Java Solr:精确匹配得分高于部分匹配得分

Java Solr:精确匹配得分高于部分匹配得分,java,solr,lucene,solrj,Java,Solr,Lucene,Solrj,在一个非常简单的例子中,我有三个文件名为“Lark”、“Larker”和“Larking”(没有文件扩展名)的文档。在solr中,我对这三个文档编制索引,将文件名映射到“title”字段。当我搜索“Lark”时,所有三个文档都会返回(这是我想要的),但它们都得到了相同的分数。我更希望“百灵鸟”的得分最高,因为这与我的质疑完全一致,其他人都落后 <field name="title" type="text_general" indexed="true" stored="true" multi

在一个非常简单的例子中,我有三个文件名为“Lark”、“Larker”和“Larking”(没有文件扩展名)的文档。在solr中,我对这三个文档编制索引,将文件名映射到“title”字段。当我搜索“Lark”时,所有三个文档都会返回(这是我想要的),但它们都得到了相同的分数。我更希望“百灵鸟”的得分最高,因为这与我的质疑完全一致,其他人都落后

<field name="title" type="text_general" indexed="true" stored="true" multiValued="false"/>

为了提高精确匹配,您可以创建一个名为“exact_title”的新字段,其中包含一个没有EdgeNGramFilterFactory的新类型“text_exact”

在模式中,您可以使用以下行:

<copyField source="title" dest="exact_title"/> 

将标题复制为确切的标题


然后对title和exact_title这两个字段运行查询。如果查询与确切标题匹配,则具有该确切标题的文档将获得比其他文档更高的分数,并将上升到顶部。

可能会延迟,但您也可以使用
关键字RepeatFilterFactory
,而无需创建新字段。这是如何描述的:

一个反复出现的问题是“我如何才能使用原始术语?” 比有词干的版本更重要“?在Solr 4.3中 关键字RepeatFilterFactory已添加以协助此操作 功能。该过滤器为每个输入令牌发出两个令牌,一个 其中一个标记为关键字属性。尊重的词干分析器 关键字属性将通过这样标记的令牌,而不使用 改变因此,这个过滤器的作用是索引 原始单词和词干版本


奇怪的是,你在3个文档中都得到了相同的分数
fieldNorm
Larking
中得分最低,在
Lark
中得分最高,因此
Lark
得分最高。您能否使用
debugQuery=on&wt=xml
重新运行查询,并检查每个文档的字段规范?添加@arun<代码>字段规范对于这三种情况都是相同的。
<lst name="debug">
  <str name="rawquerystring">Lark</str>
  <str name="querystring">Lark</str>
  <str name="parsedquery">text:lark</str>
  <str name="parsedquery_toString">text:lark</str>
  <lst name="explain">
    <str name="543d6ee4cbb33c26bbcf288b/xxnullxx/543d6ef9cbb33c26bbcf2892">
2.7104912 = (MATCH) weight(text:lark in 0) [DefaultSimilarity], result of:
  2.7104912 = fieldWeight in 0, product of:
    1.4142135 = tf(freq=2.0), with freq of:
      2.0 = termFreq=2.0
    3.8332133 = idf(docFreq=3, maxDocs=68)
    0.5 = fieldNorm(doc=0)
</str>
    <str name="543d6ee4cbb33c26bbcf288b/xxnullxx/543d6ef9cbb33c26bbcf2893">
2.7104912 = (MATCH) weight(text:lark in 1) [DefaultSimilarity], result of:
  2.7104912 = fieldWeight in 1, product of:
    1.4142135 = tf(freq=2.0), with freq of:
      2.0 = termFreq=2.0
    3.8332133 = idf(docFreq=3, maxDocs=68)
    0.5 = fieldNorm(doc=1)
</str>
    <str name="543d6ee4cbb33c26bbcf288b/xxnullxx/543d6ef9cbb33c26bbcf2894">
2.7104912 = (MATCH) weight(text:lark in 2) [DefaultSimilarity], result of:
  2.7104912 = fieldWeight in 2, product of:
    1.4142135 = tf(freq=2.0), with freq of:
      2.0 = termFreq=2.0
    3.8332133 = idf(docFreq=3, maxDocs=68)
    0.5 = fieldNorm(doc=2)
</str>
<copyField source="title" dest="exact_title"/>