2015-10-04 46 views
1

我想执行搜索使用正则表达式涉及elasticsearch中的空白。 我已经将我的字段设置为not_analyzed。而且它的映射就像elasticsearch - 搜索与正则表达式涉及空间

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

和测试我输入的两个值,

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

而且我使用正则表达式查询/ XXX YYY/
(我想用这个查询找到做一些案例record1但不是record2)

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

但它返回0结果。

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

是在elasticsearch,我不能搜索使用涉及空间的正则表达式查询?

回答

1

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

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

我不认为这是承认空间的性格。我也试过\ s,但没有奏效 – AbtPst

0

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

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