我使用Elasticsearch
来开发项目
项目需要使用数据包聚合和搜索,ES功能非常好用,满足我的所有需求,但我感到困惑的是ES的相关性
例如,我有这些索引:
Cd54 prodoct
Cd59 product
Cd58 product
Cd50 product
Cd5 product
Cd 5 product
Cd55 prodcut
Cd55 other product
Thcd5 prodcut
搜索关键字:cd5
我想要的那种是:
Cd5 product
Cd55 product
Cd55 other product
Thcd5 product
Cd50 product
...
并且不显示cd 5产品
我制定了以下策略:
设置自定义过滤器auto_ngram_filter
Open nGram, min_gram = 1, max_gram = 20, token_chars = [ "post", "digit", "punctuation", "symbol", "whitespace"]
自定义分析器
type = custom, filter = [ "standard", "lowercase", "filter auto_ngram_filter"]
映射设置如下:
Index_options = offsets,
Similarity = bm25
Analyzer = my_analyzer,
Include_in_all = true,
Term_vector = with_positions_offsets_payloads
实际的_score排序是:
Cd58 product
Cd59 product
Cd54 product
Cd50 product
Cd55 product
Cd55 other product
Cd5 product
Thcd5 product
我不明白,如果计算的值是不正确的值,因为docfreq = 1, doccount = 1
。如果是计算项,这是大部分数据,但该部分确实是docfreq = 2, doccount = 2
?如何获得这些结果?
根据ES官方文件,单词越短,重量越高,但实际上并非如此,而且完美匹配并没有得到高分。
如何设置以实现我的目标?尝试了很多方法并且无法解决问题,我需要你的帮助,如果你知道如何解决这个问题,请告诉我,非常感谢你!