performance - 加快Elasticsearch的查询速度

标签 performance elasticsearch elastic-stack elasticsearch-query

像这样的查询有什么问题呢?它是从头开始写的。它返回相关结果,但速度太慢(此示例花费 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。它执行以下操作。
  • 获取_idlike提到的所有文档
  • 使用field选项分析
  • 来分析analyser
  • 从step1的匹配文档中分析相同的字段。标记器的过滤器列表还添加了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/

    相关文章:

    mysql - apache/mysql 响应缓慢但未达到 cpu/内存和限制

    performance - 庞大服务器/服务器集群的Elasticsearch模糊匹配优化

    elasticsearch - Elastic Search 中带有附加条件的 Completion Suggester

    logging - 在ELK中结合日志和查询

    java - 有没有更有效的方法来做到这一点? |月份换算

    java - 是否可以在应用程序启动之间将 JVM 保留在内存中?

    elasticsearch - elasticsearch-如何聚合和按多行过滤

    elasticsearch - ElasticSearch如何按文件/字段的重量排序?

    elasticsearch - 如何在Logstash中编写grok模式

    c# - 性能/风格 : Changing an object by reference vs returning a copy in C#