在Elasticsearch中查询至少包含一个与集合不匹配的项目的文本/关键字字段

0s0u357o  于 2023-02-18  发布在  ElasticSearch
关注(0)|答案(1)|浏览(172)

我有一个文档有一个“bag.contents”字段(用.keyword派生的文本索引),其中包含一个逗号分隔的项目列表。下面是一些示例:

`Apple, Apple, Apple`
`Apple, Orange`
`Car, Apple` <--
`Orange`
`Bus`  <--
`Grape, Car`  <--
'Car, Bus`  <--

所需的查询结果应该是所有文档,其中 * 至少有一个 * 示例 * 不是 * 'Apple'、' Orange '、' Grape ',如上面的箭头所示。
我确信DSL是必须和不必须的组合,但是在20次左右的迭代之后,似乎很难让Elasticsearch返回正确的结果集,除了一个不包含这3件事中的任何一件的结果集。
还值得注意的是,原始文档中的这个字段是一个JSON数组,Kibana将其显示为单个字段,元素显示为逗号分隔的字段。

vaj7vani

vaj7vani1#

1-如果它显示为单个字段,则可能未索引为数组-请确保要索引的文档格式正确。即,您需要它

{ "contents": ["apple","orange","grape"]}

而不是

{"contents": "apple,orange,grape"}

2-关于查询-如果您知道所有可能的术语,而做查询-您可以形成一个term_set查询与所有其他术语,但appleorangegrape. termset查询允许控制所需的最小匹配(1在您的情况下)
如果您不知道所有可能的术语,可以创建一个单独的字段来索引除appleorangegrape之外的所有其他单词,并针对该字段进行查询。

相关问题