我正在尝试根据我的文档中的字符串数组构建一个建议器,它与这个类似,但有几个不同之处:completion suggester
来自 Elasticsearch 的并不完全符合我的要求(在过滤和前缀匹配方面),因为我需要一个边缘 ngram,可以作用于句子的任何单词,对重音不敏感。让我用一个例子来澄清一下。
假设我有以下索引文档。我想根据查询建议“标签” q
(我不关心文档本身,只关心tag
与我的查询匹配的 s)
[
{ "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"
orq = "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"
should return[ "consulting and management of IT" ]
--> should match 的两个前缀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 结果之外,这些情况几乎都不起作用
我可以构建一个自定义建议器或自定义搜索查询来满足我的要求和上面给出的示例吗?