ElasticSearch 如何在不适条件下计算术语频率,例如匹配"b b b b b b b b b b"中的短语"b b"?



编辑:我举了个坏例子。我的用例实际上是汉字,即短语匹配"我我"在"我我我我我我我我我我"。所以对于那些不熟悉中文搜索引擎的人来说,问题实际上是在"bbbbbbbbb"中搜索"bbb",而不是在"bbbbsbbbb"中搜索"bb"。我还编辑了标题以避免混淆。

额外的问题:如果用"短语匹配前缀"代替"max_expansions=4",频率是多少?

原始帖子:假设搜索关键字为"bb",则文档为"bbbbbbbb"(10b's)。类型被分析,假设"b"是被索引的"原子术语"。

我认为文档内部表示为这样的东西:{'b':[0,1,2,3,4,5,6,7,8,9],元数据:{…}}其中数字是术语"b"的位置。如果我错了,请纠正我。

根据弹性导轨的项频率tf(t in d)=sqrt(频率)。(https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html#tf)那么,当"bb"是短语,与10个b的文档匹配时,频率是多少,是5还是9?

当您使用"标准分析器"时,"bbbbbbbbb"将被分析为"0:bbbbbbbb",而不是这个{'b':[0,1,2,3,4,5,6,7,8,9]。搜索"bb"没有任何结果。如果文档中的短语类似于"b b b b",则{'b':[0,1,2,4,5,67,8]是正确的。但如果您再次搜索"bb",则没有结果。但如果你搜索像"b"这样的东西,它会分析为"b"或"b",文档中的频率是9(可能是9+9/2)。

通过这个API,你可以看到分数是如何计算的:

GET/my_index/doc/_search?解释

有关评分的更多信息:

https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html

最新更新