如何在Elasticearch的查询中获取“相关文档”?

时间:2017-08-26 23:51:40

标签: elasticsearch parent-child elasticsearch-aggregation elasticsearch-bulk-api

我在弹性搜索中遇到问题我无法解决:

我在索引中有两种不同的类型,一种叫做“关键字”,另一种叫做“产品”。 关键字的字符串属性为“keyword_content”,产品的文本属性为“content”。

我需要查询所有关键字及其前N个相关产品。相关关系由标准查询

定义

我知道我在ElasticSearch中有父子功能,但是当我插入关键字时我事先并不知道相关产品(唯一的方法是在插入关键字之前,对每个关键字使用搜索查询知道哪些产品是相关的,并使用正确的产品索引关键字,但这意味着在插入之前每次查询,这是昂贵的。)

让我们假设我已经在ElasticSearch中拥有两个UNRELATED类型。如何查询所有关键字及其相关的N相关产品。我正在寻找一种“动态字段”,它是使用查询字符串查询不同类型的结果,每个文档的'keyword_content'属性。

我想要类似的东西:

关键字文档示例:

{ "_id": 1,
  "keyword_content": "happy dogs"
}
{ "_id": 2, 
"keyword_content": "spaceship"
}

产品文件示例

{ "_id": "P1", "content": "This is a collar for happy dogs"}
{ "_id": "P2", "content": "This is a collar for angry dogs"}
{ "_id": "P3", "content": "This is a spaceship"}

我想要这样的东西(我正在简化弹性搜索格式以更好地解释我的用例)(不是类型不相关,或者我可以将它们联系起来,但我无法指定哪些keyowrds与哪个产品相关,我想要弹性搜索告诉我):

[
    {
         "_id": 1,
        "keyword_content": "happy dogs"
        "related_products": [
            { "_id": "P1", "content": "This is a collar for happy dogs"},
            { "_id": "P2", "content": "This is a collar for angry dogs"}
        ]
    },
    {
         "_id": 2,
        "keyword_content": "spaceship"
        "related_products": [
            { "_id": "P3", "content": "This is a spaceship"}
        ]
    }
]

0 个答案:

没有答案