Regexp vs在Elasticsearch中包含性能比较

时间:2018-03-13 14:08:11

标签: regex elasticsearch

我在一个项目上工作,我需要根据"创建"来汇总结果。和"标签"领域。 我创建了以下查询,它们都按照我的预期给出了结果。但我想知道哪个查询运行得更快?

我的第一个问题:

Y

我的第二个问题:

public class Raycast : MonoBehaviour
{  

    Ray myRay;      // initializing the ray
    RaycastHit hit; // initializing the raycasthit
    public GameObject objectToinstantiate;

    // Update is called once per frame
    void Update()
    {
        myRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(myRay, out hit))
        {
            if (Input.GetMouseButtonDown(0))
        {
            Instantiate(objectToinstantiate, hit.point, Quaternion.identity);
            Debug.Log(hit.point);
        }
    }

1 个答案:

答案 0 :(得分:1)

由于该字段是keyword,并且当涉及到正则表达式(仅完美匹配)时,您不需要任何特殊内容,我会像下面这样做。您还要注意我在terms部分添加了query过滤器,以便在进行聚合之前尝试缩小结果范围(理论上,对于聚合而言,要做的工作较少) )。另外,我在这里没有看到使用regexp的理由,因此我使用了terms聚合。如果您真的对性能比较感兴趣,我建议在该字段中设置更多文档和术语的负载测试,并执行一些测试。 Elastic有自己的基准测试工具,您可以使用它:Rally

{
  "size": 0,
  "query": {
    "terms": {
      "labels": [
        "behavior-change",
        "first-occurrence"
      ]
    }
  }, 
  "aggs": {
    "HEATMAP": {
      "date_histogram": {
        "field": "created",
        "interval": "day"
      },
      "aggs": {
        "BEHAVIOUR_CHANGE": {
          "terms": {
            "field": "labels",
            "include": "behavior-change"
          }
        },
        "FIRST_OCCURRENCE": {
          "terms": {
            "field": "labels",
            "include": "first-occurrence"
          }
        }
      }
    }
  }
}