1

我有可以有很多TAGS的POSTS。我只希望我的查询返回带有唯一标签的POSTS ,而不是其他标签。例如。

posts: [
  {  id: 1
     tags: [hello, world]
     ...
  }
  {  id: 2
     tags: [hello]
  }
]

以下:

搜索?q=标签:你好

应该只返回:

posts: [
  {  id: 2
     tags: [hello]
  }
]

我将如何使用弹性搜索来完成此任务?

4

1 回答 1

1

Elasticsearch 在底层使用了 lucene,它是一个倒排索引。粗略地说,它索引术语并允许您根据术语查询文档。如果您搜索一个术语,它当然会返回包含该术语的文档。标签也是术语,所以逻辑是一样的。我不知道您如何告诉 lucene 返回包含该术语的文档,或者相反,以排除包含任何其他术语的所有文档。

您可以实现您希望在单个值中完全发送标签的内容,并将该字段的映射设置为"index" : "not_analyzed". 这样,您将为每个文档索引一个标签术语,其中包含与其相关的所有标签。如果您搜索特定标签,则将返回仅包含该特定标签的文档。另一方面,如果一个文档有多个标签,您需要一起搜索所有标签才能取回该文档。您的要求对我来说看起来很奇怪,但如果这是您想要的,那么您应该可以做到。

于 2012-10-03T20:12:22.523 回答