elasticsearch - 用涉及空间的正则表达式搜索

时间:2015-10-04 13:32:21

标签: regex elasticsearch

我想使用涉及elasticsearch中的空格的正则表达式进行搜索。 我已经将我的字段设置为not_analyzed。它的映射就像

"type1": {
   "properties": {
      "field1": {
         "type": "string",
         "index": "not_analyzed",
         "store": true
      }
   }
}

我为测试输入了两个值,

"field1":"XXX YYY ZZZ"
"field1":"XXX ZZZ YYY"

我做一些使用正则表达式查询/ XXX YYY /
的情况(我想使用此查询来查找记录1而不是记录2)

{
    "query": {
        "query_string": {
           "query": "/XXX YYY/"
        }
    }
}

但它返回0结果。

但是如果我不使用正则表达式进行搜索(没有正斜杠' /'),则会返回record1和record2。

在弹性搜索中,我无法使用涉及空间的正则表达式查询进行搜索吗?

3 个答案:

答案 0 :(得分:1)

您可以使用regexp个查询来实现此目的。请注意,查询性能可能会很慢。以下查询将搜索field1的值包含的所有文档" XXX YYY"。

POST <index_name>/type1/_search
{
   "query": {
      "regexp": {
         "field1": ".*XXX YYY.*"
      }
   }
}

答案 1 :(得分:0)

您需要的是一个''term''查询,它不会tokenise将搜索查询分解为更小的部分。有关术语查询的更多信息,请访问:https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-term-query.html

有一种特殊的术语查询允许您使用名为regexp查询的正则表达式。这应该匹配任何空格:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html

答案 2 :(得分:0)

您可以继续使用query string,但您的正则表达式只是缺少一小部分,即最后的.*。如果你运行它,你将得到你期望的单一结果。

{
    "query": {
        "query_string": {
           "query": "/XXX YYY.*/"
        }
    }
}