我有一个文档有一个“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将其显示为单个字段,元素显示为逗号分隔的字段。
1条答案
按热度按时间vaj7vani1#
1-如果它显示为单个字段,则可能未索引为数组-请确保要索引的文档格式正确。即,您需要它
而不是
2-关于查询-如果您知道所有可能的术语,而做查询-您可以形成一个term_set查询与所有其他术语,但
apple
,orange
和grape
. termset查询允许控制所需的最小匹配(1在您的情况下)如果您不知道所有可能的术语,可以创建一个单独的字段来索引除
apple
orange
和grape
之外的所有其他单词,并针对该字段进行查询。