弹性搜索中的唯一标记查询

时间:2012-10-02 16:19:46

标签: lucene elasticsearch

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

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

以下内容:

搜索Q =标签:喂

应该只返回:

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

如何使用弹性搜索完成此操作?

1 个答案:

答案 0 :(得分:1)

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

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