像这样的查询有什么问题呢?它是从头开始写的。它返回相关结果,但速度太慢(此示例花费 187.9 ms )
{
"query": {
"bool": {
"must": [{
"more_like_this": {
"fields": ["similarity.analyzed"],
"like": [{
"_id": 4
}, {
"_id": 550
}, {
"_id": 757
}],
"min_term_freq": 1,
"min_doc_freq": 1,
"analyzer": "searchkick_search2",
"minimum_should_match": "10%"
}
}, {
"range": {
"count_posts": {
"gt": 0
}
}
}],
"must_not": [{
"terms": {
"_id": [4, 550, 757]
}
}]
}
},
"size": 10
}
该查询查找与给定标签集相似的标签。相似性-带有所有帖子标题的文本字段,并带有空格。
count_posts-数字字段,其中包含每个标签的帖子数。
在Ubuntu 18.04上作为单个节点运行Elasticseach 7.8.0。带有Searchkick gem的Rails 5应用程序。
最佳答案
Whats wrong with this more like this query?
"like": [{
"_id": 4
}, {
"_id": 550
}, {
"_id": 757
}]
它的作用类似于multi get
API。它执行以下操作。_id
中like
提到的所有文档field
选项分析analyser
ms
。 而且您还有两个条件。文件说
A more complicated use case consists of mixing texts with documents already existing in the index.
不幸的是,我认为这无法进一步优化。但是您可以在
like
中添加文本而不是id,以使其变得更好。希望查询由于缓存而不总是花费100ms以上。
关于performance - 加快Elasticsearch的查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62597530/