我有 POSTS ,可以有很多 TAGS 。我只希望我的查询返回带有唯一标记的 POSTS ,而不是其他标记。例如。
posts: [
{ id: 1
tags: [hello, world]
...
}
{ id: 2
tags: [hello]
}
]
以下内容:
搜索Q =标签:喂
应该只返回:
posts: [
{ id: 2
tags: [hello]
}
]
如何使用弹性搜索完成此操作?
答案 0 :(得分:1)
Elasticsearch在下面使用lucene,这是一个倒排索引。粗略地说,它会对术语进行索引,并允许您根据术语查询文档。如果您搜索一个术语,它当然会返回包含该术语的文档。标签也是术语,所以逻辑是一样的。我不知道如何告诉lucene返回包含仅该术语的文档,或者反过来,以排除包含任何其他术语的所有文档。
您可以在单个值中实现您想要完全发送标记的内容,并将该字段的映射设置为"index" : "not_analyzed"
。这样,您将为每个文档索引单个标记术语,其中包含与其相关的所有标记。如果搜索特定标记,则将返回仅包含该特定标记的文档。另一方面,如果文档有多个标签,则需要一起搜索所有标签才能获取该文档。你的要求对我来说很陌生,但如果这就是你想要的,你应该能够做到这一点。