具有部分边缘 ngram 完成的数组字段的 Elasticsearch 搜索建议

Cyr*_*ris 7 elasticsearch search-suggestion elasticsearch-7

我正在尝试基于我的文档中的字符串数组构建一个建议器,它与这个类似,但有几个不同之处: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" ] }
]
Run Code Online (Sandbox Code Playgroud)

我想将前缀与重音容差相匹配,以下查询/响应突出显示了我需要的内容

  • (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" ]-->q无论顺序如何,都应该匹配的前缀

如果我使用常规的completion映射器+建议器,

[
  { "tags": [ "société générale", "consulting" ] },
  { "tags": [ "big data", "big", "data"] },
  { "tags": [ "data" ] },
  { "tags": [ "data engineering" ] }
  { "tags": [ "consulting and management of IT" ] }
]
Run Code Online (Sandbox Code Playgroud)

除了 (2)、(4) 和 (3) 的 1/3 结果之外,这些情况几乎都不起作用

我是否可以构建满足我的要求和上面给出的示例的自定义建议程序或自定义搜索查询?