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=0
和 min_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 中查找所需安全权限的简单方法