elasticsearch,Lucene,Indexing,elasticsearch" /> elasticsearch,Lucene,Indexing,elasticsearch" />

Lucene 这个ElasticSearch查询的排名背后的原因是什么?

Lucene 这个ElasticSearch查询的排名背后的原因是什么?,lucene,indexing,elasticsearch,Lucene,Indexing,elasticsearch,我有两份文件: { id: 7, title: 'Wet', description: 'asdfasdfasdf' } { id: 6 title: 'Wet wet', description: 'asdfasdfasdf' } 除了第二个文档中的额外单词外,它们几乎相同 我的问题是: var qobject = { query:{ custom_score:{ que

我有两份文件:

{
    id: 7,
    title: 'Wet',
    description: 'asdfasdfasdf'
}

{
    id: 6
    title: 'Wet wet',
    description: 'asdfasdfasdf'
}
除了第二个文档中的额外单词外,它们几乎相同

我的问题是:

var qobject = {
        query:{
            custom_score:{
                query:{
                   multi_match:{
                     query: q, //I searched for "wet"
                     fields: ['title','description'],
                   }
                },
                script: '_score '
            }
        }
    }
好的,当我运行这个查询时,我得到以下结果:

{ total: 2,
  max_score: 1.8472979,
  hits: 
   [ { _index: 'products',
       _type: 'products',
       _id: '7',
       _score: 1.9808292,
       _source: [Object] },
     { _index: 'products',
       _type: 'products',
       _id: '6',
       _score:  1.7508222,
       _source: [Object] } ] }
为什么id 7的排名高于id 6?分数背后的原因是什么?6不应该因为有两个单词而排名更高吗

如果我想要更多的单词=更多的权重怎么办?我该如何修改我的查询来修改它

解释如下:

"_explanation": {
            "value": 1.9808292,
            "description": "custom score, product of:",
            "details": [
                {
                    "value": 1.9808292,
                    "description": "script score function: composed of:",
                    "details": [
                        {
                            "value": 1.9808292,
                            "description": "fieldWeight(title:wet in 0), product of:",
                            "details": [
                                {
                                    "value": 1,
                                    "description": "tf(termFreq(title:wet)=1)"
                                },
                                {
                                    "value": 1.9808292,
                                    "description": "idf(docFreq=2, maxDocs=8)"
                                },
                                {
                                    "value": 1,
                                    "description": "fieldNorm(field=title, doc=0)"
                                }
                            ]
                        }
                    ]
                },
                {
                    "value": 1,
                    "description": "queryBoost"
                }
            ]
        }

"_explanation": {
            "value": 1.7508222,
            "description": "custom score, product of:",
            "details": [
                {
                    "value": 1.7508222,
                    "description": "script score function: composed of:",
                    "details": [
                        {
                            "value": 1.7508222,
                            "description": "fieldWeight(title:wet in 0), product of:",
                            "details": [
                                {
                                    "value": 1.4142135,
                                    "description": "tf(termFreq(title:wet)=2)"
                                },
                                {
                                    "value": 1.9808292,
                                    "description": "idf(docFreq=2, maxDocs=8)"
                                },
                                {
                                    "value": 0.625,
                                    "description": "fieldNorm(field=title, doc=0)"
                                }
                            ]
                        }
                    ]
                },
                {
                    "value": 1,
                    "description": "queryBoost"
                }
            ]
        }

查看查询的解释输出以了解原因。您可以使用或添加到当前搜索请求

默认情况下,lucene使用tf/idf术语频率,即反向文档频率相似性来评分文档。对于与查询匹配的每个术语,将考虑不同的因素。以下是最重要的几点:

术语频率:术语在文档中的频率。越多越好。如果一个术语出现多次,则文档更匹配。 反向文档频率:该术语在索引中的频率。越少越好。罕见条款战胜普通条款。 规范:索引时间提升默认值1,无提升+字段规范,定义短字段优于长字段。 根据您正在执行的查询,文档的评分会因规范不同而有所不同。您可以在映射和重新索引中禁用规范,但这样也会损失索引时间,我认为您无论如何都不会使用。事实上,在您的示例中,第二个文档的分数较低,因为字段标准较低,尽管术语频率较高,但为2而不是1


另一个解决方案是插入不同的lucene相似性:lucene 4提供更多相似性,并且允许定义每个字段的相似性。这些功能已在elasticsearch 0.90中公开。

查看查询的解释输出,了解原因。您可以使用或添加到当前搜索请求

默认情况下,lucene使用tf/idf术语频率,即反向文档频率相似性来评分文档。对于与查询匹配的每个术语,将考虑不同的因素。以下是最重要的几点:

术语频率:术语在文档中的频率。越多越好。如果一个术语出现多次,则文档更匹配。 反向文档频率:该术语在索引中的频率。越少越好。罕见条款战胜普通条款。 规范:索引时间提升默认值1,无提升+字段规范,定义短字段优于长字段。 根据您正在执行的查询,文档的评分会因规范不同而有所不同。您可以在映射和重新索引中禁用规范,但这样也会损失索引时间,我认为您无论如何都不会使用。事实上,在您的示例中,第二个文档的分数较低,因为字段标准较低,尽管术语频率较高,但为2而不是1


另一个解决方案是插入不同的lucene相似性:lucene 4提供更多相似性,并且允许定义每个字段的相似性。这些功能已在elasticsearch 0.90中公开。

我可以问一下,您的自定义分数查询想要实现什么吗?此外,您还遗漏了问题中最重要的一点:您正在搜索的术语。我可以问一下,您通过自定义分数查询想要实现什么吗?此外,您还遗漏了问题中最重要的一点:您正在搜索的术语。谢谢Javanna。我已经编辑了我的问题,包括解释和我的问题。你能看看我的解释问题吗?最后的分数是如何计算的…它是细节中的平均值吗?我猜,两个单词的文档比一个单词的文档低的原因是:值:0.625,描述:fieldNormfield=title,doc=0…normss的好处到底是什么?是的。第二个文档的tf较高,因为它包含两个术语,但另一方面,字段的范数较低,为0.625,而不是影响分数的范数,甚至比tf更高。字段规范应该是:1/sqrtnumber of terms。您建议我关闭规范吗?或者这只是一个坏例子?好吧,你可能应该尝试更多的真实数据,看看规范是否仍然困扰着你。在这种情况下,可以禁用它。那么字段的长度就不再重要了。谢谢Javanna。我已经编辑了我的问题,包括解释和我的问题。你能看看我的解释问题吗?最后的分数是如何计算的…它是细节中的平均值吗?我猜,两个单词的文档比一个单词的文档低的原因是:值:0.625,描述:fieldNormfield=title,doc=0…normss的好处到底是什么?是的。第二个文档得到更高的tf,因为它包含t
erm两次,但另一方面,该字段的标准值较低,为0.625,而不是影响分数的标准值,甚至比tf更高。字段规范应该是:1/sqrtnumber of terms。您建议我关闭规范吗?或者这只是一个坏例子?好吧,你可能应该尝试更多的真实数据,看看规范是否仍然困扰着你。在这种情况下,可以禁用它。那么字段的长度就不再重要了。