我正在尝试根据文档中的字符串数组构建一个建议器,它类似于this one https://stackoverflow.com/questions/20789224/elasticsearch-autocomplete-search-on-array-field但有几个区别:completion suggester
来自 Elasticsearch 的功能并不完全符合我的要求(在过滤和前缀匹配方面),因为我需要一个边缘 ngram,它可以作用于句子中的任何单词,且不区分重音。让我用一个例子来澄清。
假设我有以下索引文档。我想根据查询建议“标签”q
(我不关心文档本身,只关心tag
与我的查询相匹配)
[
{ "tags": [ "société générale", "consulting" ] },
{ "tags": [ "big data", "big", "data"] },
{ "tags": [ "data" ] },
{ "tags": [ "data engineering" ] }
{ "tags": [ "consulting and management of IT" ] }
]
我想将前缀与重音容差相匹配,以下查询/响应突出显示了我需要的内容
- (1)
q = "societe"
or q = "societe generale"
应该返回[ "société générale" ]
--> 不区分重音
- (2)
q = "big data"
应该返回[ "big data" ]
--> 前缀“big”和“data”必须在字符串中
- (3)
q = "data"
应该返回[ "big data", "data", "data engineering" ],
--> 句子中的任何位置(但作为前缀)
- (4)
q = "ata"
不应返回任何内容(不是前缀)
- (5)
q = "IT consulting"
应该返回[ "consulting and management of IT" ]
--> 的两个前缀q
无论顺序如何都应该匹配
如果我使用常规的completion
映射器+建议器,
# assuming a mapping of "tags", of type 'completion' is configured in my ES
{
suggest: {
text: "big data",
tags: {
completion: {
field: "tags",
},
},
除了 (2)、(4) 和 (3) 的 1/3 结果之外,这些情况几乎都不起作用
我可以构建一个自定义建议器或自定义搜索查询来满足我的要求和上面给出的示例吗?