我想使用涉及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。
在弹性搜索中,我无法使用涉及空间的正则表达式查询进行搜索吗?
答案 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.*/"
}
}
}