Elastic中针对多个精确字符串的高效搜索查询

时间:2017-06-24 18:57:21

标签: amazon-web-services elasticsearch

我想在elasticsearch节点的所有文档中搜索一些(大约50个字符串),数组中的字符串包含空格和特殊字符。我在弹性搜索中存储的所有文档中都有文本,如下所示:

{"mid": 579820586177,
"text": "If you read and listen to",
}
{"mid": 579820586178,
"text": "two articles every day, your reading and",
}
{"mid": 579820586179,
"text": "You can learn quickly and after some time you will not have",
}

这样的字符串数组
["listen to","two articles","some time"]

我使用弹性查询,如下所示,但我回复的反应太慢

"query_string": {
  "query": "text:\"\%listen to\%\" OR text:\"\%two articles\%\" OR text:\"\%some time\%\"",
  "analyze_wildcard": true
}

10M文档的有效查询是什么,大约50个字。

2 个答案:

答案 0 :(得分:0)

除非我遗漏了一些明显的东西,否则你可以使用这样的通配符查询 -

  {
    "query": {
    "bool": {
         "should": [{
                  "wildcard": {
                     "text": {
                        "value": "listen to"
                     }
                  }
               },
               {
                  "wildcard": {
                     "text": {
                        "value": "two articles"
                     }
                  }
               }
         ],
        "minimum_should_match":1

      }
   }
 }

答案 1 :(得分:0)

不确定我是否理解你是正确的,但是注意到你把通配符放在哪里,这就是构建短语查询的地方。如果您在文本中查找应按该顺序在文本中的两个单词,则短语查询将在何处进行。下面是如何使用的示例和链接以获取更多信息。

{
  "query": {
    "bool": {
      "should": [
        {
          "phrase": {
            "text": "listen to"
          }
        },
        {
          "phrase": {
            "text": "two articles"
          }
        }
      ]
    }
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html