gpt4 book ai didi

elasticsearch - 在ES 1.4和ES 2.3中使用Analyzer API获取不同的位置值

转载 作者:行者123 更新时间:2023-12-03 01:55:26 24 4
gpt4 key购买 nike

我从ES 1.4升级到ES 2.3,并且在测试文档评分时,我发现相同查询的Explain API输出之间存在差异:

{
"query": {
"match": {
"article_content": "news"
}
}
}

从ES 2.3.0中,我得到:
{
"value": 0.9890914,
"description": "fieldWeight in 3931, product of:",
"details": [
{
"value": 5.8309517,
"description": "tf(freq=34.0), with freq of:",
"details": [
{
"value": 34,
"description": "termFreq=34.0",
"details": []
}
]
},
{
"value": 5.428089,
"description": "idf(docFreq=117, maxDocs=9885)",
"details": []
},
{
"value": 0.03125,
"description": "fieldNorm(doc=3931)",
"details": []
}
]
}

从ES 1.4.2中我得到:
{
"value": 0.9319723,
"description": "fieldWeight in 403, product of:",
"details": [
{
"value": 5.8309517,
"description": "tf(freq=34.0), with freq of:",
"details": [
{
"value": 34,
"description": "termFreq=34.0"
}
]
},
{
"value": 5.114622,
"description": "idf(docFreq=226, maxDocs=13899)"
},
{
"value": 0.03125,
"description": "fieldNorm(doc=403)"
}
]
}

我以为 custom_analyzer可能有问题,因此即使使用Analyze API也进行了检查:

对于ES 2.3,我使用了:
curl -XGET 'localhost:9200/new_index/_analyze' -d '{
"analyzer" : "custom_text_analyzer",
"text" : "...."
}'

对于ES 1.4.2,我使用了
curl -XGET 'localhost:9210/new_index2/_analyze?analyzer=custom_text_analyzer' -d '...'

两次调用产生的 token 数量相同,唯一的不同是 "position"的值:

对于ES 2.3.0
{
"tokens": [
{
"token": "show",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
}, ....

对于ES 1.4.2
{
"tokens": [
{
"token": "show",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 1
}, ....

注意:
  • 这两个索引在数量和内容上都具有相同的文档。
  • 我测试的文档有289个 token
  • 两种索引的定制分析器相同。 (我检查了两次)

  • 我只想了解可能是什么问题?

    最佳答案

    得分的区别在这里:

    2.3.0 :

    {
    "value": 5.428089,
    "description": "idf(docFreq=117, maxDocs=9885)",
    "details": []
    }

    1.4.2 :
    {
    "value": 5.114622,
    "description": "idf(docFreq=226, maxDocs=13899)"
    }

    因此 IDF是不同的,因为您似乎拥有不同数量的文档,并且这些文档中术语的使用频率也不同。您说您有相等数量的文档,但是 maxDocs takes into consideration all documents in a Lucene shard所有都包括标记为已删除的文档。

    我的假设是您的1.4.x索引中也有一些已删除的文档(尚未从合并段中从磁盘上物理删除),这些文档会影响计分计算。您可以使用 curl -XGET "http://localhost:9200/_cat/indices?v"检查已删除的文档计数,还可以使用 _optimize API( curl -XPOST "http://localhost:9200/my_index/_optimize?max_num_segments=1")强制合并。但是请注意,优化过程确实会占用一些资源,因此您希望在群集不忙时执行此操作。

    关于elasticsearch - 在ES 1.4和ES 2.3中使用Analyzer API获取不同的位置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990891/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com