【问题标题】:elasticsearch - search with regex involving spaceelasticsearch - 使用涉及空间的正则表达式搜索
【发布时间】:2016-01-01 05:59:16
【问题描述】:

我想在 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 个结果。

但是,如果我不使用正则表达式(不使用正斜杠“/”)进行搜索,则记录 1 和记录 2 都会返回。

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

【问题讨论】:

标签: regex elasticsearch


【解决方案1】:

您需要的是一个“术语”查询,它不会tokenise 将搜索查询分解成更小的部分。更多关于术语查询在这里:https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-term-query.html

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我认为它不能识别空格字符。我也试过 \s 但没用
    • @AbtPst 你为什么这么说?请注意,字段“field1”被标记为“not_analyzed”。这将导致 Elasticsearch 不会围绕空格进行标记。所以我的查询会起作用。
    【解决方案3】:

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

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

    【讨论】:

    • 这不适用于我的用例。 "/XXX YYY.*/" 匹配XXX YYY blah blah blah之类的字符串。但是,"/XXX YYY .* something else/" 匹配 XXX YYY blah blah something else... 尚无线索说明为什么...
    • @Tabbernaut 随时为您的特定问题创建一个新问题
    • 想出了一个办法:"/XXX YYY.*/" AND "/.*something else/" 有效。我猜这不可能在一个子句中完成。
    • @Tabbernaut 不确定您的用例,请随意创建一个新问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多