Elasticsearch 通过另一个文档查找文档

Posted

技术标签:

【中文标题】Elasticsearch 通过另一个文档查找文档【英文标题】:Elasticsearch find documents by another document 【发布时间】:2015-01-14 16:11:01 【问题描述】:

我想在 elasticsearch 中搜索与给定文档 id docId 具有完全相同字段的文档。例如用户使用 docId 调用 api,我想过滤文档,以使返回的所有文档都满足 docId 中的某些参数。

例如,我可以这样查询 Elasticsearch:

POST similarTerms/_search

    "fields": [
       "_id", "title"
    ]   ,
    "filter": 
    "query": "match": 
       "title": doc[docId].title
    
    , 
    "size": 30


我知道我可以使用 docId 获取文档,然后我可以准备上述查询,但是我能否以某种方式避免网络跳跃,因为即使是毫秒级的时间改进对我的应用程序来说也是非常重要的。

谢谢

【问题讨论】:

我遇到了您遇到的确切问题,如果有办法获取 docId 并使用它在上面提到的查询中进行迭代,我可以解决我的问题。您是否找到了获取 docId 并在上面的查询中使用它的方法。有的话可以分享给我吗? 【参考方案1】:

这是“更像这样” api 的教科书场景。引用the docs:

more like this (mlt) API 允许获取“类似”的文档 指定的文件。这是一个例子:

$ curl -XGET 'http://localhost:9200/twitter/tweet/1/_mlt?mlt_fields=tag,content&min_doc_freq=1'

API 只会导致执行带有 moreLikeThis 的搜索请求 查询(http参数匹配参数到more_like_this 询问)。这意味着请求的主体可以选择包括 搜索 API 中的所有请求正文选项(aggs、from/to 等 在)。在内部,越像这个 API 就相当于执行一个 more_like_this_field 查询的布尔查询,每个查询一个 指定 mlt_fields。

如果您计划仅使用一个文档进行测试(就像我一样),请确保您还设置了 min_term_freq=0min_doc_freq=0: GET /my_index/locations/1/_mlt?min_term_freq=0&min_doc_freq=0

【讨论】:

我可以根据正在搜索的文档过滤更多类似的内容吗?我可以说只返回一个文档,它的特定字段的值与传递的文档的值完全相同。

以上是关于Elasticsearch 通过另一个文档查找文档的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:运用 Elasticsearch 查找类似文档:more_like_this

Elasticsearch:运用 Elasticsearch 查找类似文档:more_like_this

在 Elasticsearch 中查找所需安全权限的简单方法

Elasticsearch消除 Elasticsearch 中的重复文档

在 elasticsearch 上查找具有空字符串值的文档

_doc + Spring data elasticsearch + 查找文档