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