这是我的设置和映射:
{
'settings': {
'index':{
'analysis':{
'analyzer':{
'analyzer_keyword':{
'tokenizer': 'keyword',
'filter': 'lowercase'
}
}
}
}
},
'mappings': {
'example':{
'properties': {
'group' : {'type' : 'string', 'analyzer': 'analyzer_keyword'},
'description' : {'type' : 'string', 'analyzer': 'analyzer_keyword'},
'names' : {'type' : 'string', 'analyzer': 'analyzer_keyword'}
}
}
}
}
由于我的上下文(我需要搜索部分模式),我需要使用bool(must,must_not,should)查询与正则表达式相结合。除了包含点字符的字段外,它适用于我的所有字段。
例如,
names
是一个字符串数组,其中包含带点的数据:
"cyap7_1.pe3269","synp6_1.pe2492","syns3_1.pe382","cyap8_1.pe2829"
以下是一些可行的示例(按预期返回结果)和不起作用的示例(不返回任何结果):
简单查询有效:
curl -XPOST "http://localhost:9200/example/test/_search?q=cyap7_1.pe3269"
部分匹配的简单查询不起作用:
curl -XPOST "http://localhost:9200/example/test/_search?q=*cyap7_1.pe3269*"
我想要的确切查询不起作用:***
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*cyap7_1.pe3269.*"}}}} } } }'
此查询的子部分有效:
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*pe3269.*"}}}} } } }'
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*cyap7_1.*"}}}} } } }'
使用dot的此查询的子部分不起作用(即使使用正则表达式改进):
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*1.pe3.*"}}}} } } }'
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*cyap7_1\.pe3269.*"}}}} } } }'
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*cyap7_1\\.pe3269.*"}}}} } } }'
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*cyap7_1.*pe3269.*"}}}} } } }'
***如何使此查询有效?
更新
这真的很奇怪,但现在适用于:
curl -XPOST "http://localhost:9200/example/test/_search" -d
'{ 'query': { 'filtered': { 'filter':
{"bool":{"must":{"regexp":{"names":".*cyap7_1.pe3269.*"}}}} } } }'
当我更新索引以添加字段names
时,我已经创建了索引。
因此,在更新.*cyap7_1.*
和.*pe3269.*
之后工作但不是.*cyap7_1.pe3269.*
这真的很奇怪,这就是我创建帖子的原因。
但是现在,我删除了索引然后重新创建它。它适用于.*cyap7_1.pe3269.*
...
更新类型失败了整个术语的索引......