在我的索引数据中,我有一些文件具有这样的值 -
"排除y:\ dkj .... \ sdfisd \ sdfsdf \ asdfai"
我的要求是根据" \ .... \"搜索所有具有此类条目的文件。因此,我正在使用" regexp"。 目前我已使用下面的正则表达式,但它并没有为我做好准备 -
以下是我向弹性搜索发出的查询部分。
"bool" : {
"must" : [ {
"query_string" : {
"query" : "\"DC2\"",
"default_field" : "COLLECTOR_NAME"
}
}, {
"regexp" : {
"RAW_EVENT_DATA" : {
"value" : ".*?[\\.]{4}.*",
"flags_value" : 0
}
}
} ]
}
请提供一些建议。
答案 0 :(得分:0)
通常它与分析仪有关 让我们创建具有以下映射的类型
{
"my_index": {
"mappings": {
"test": {
"properties": {
"title": {
"type": "string"
},
"title_raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
添加新文件
POST my_index/test/1
{
"title":"exclude y:\\dkj....\\sdfisd\\sdfsdf\\asdfai",
"title_raw":"exclude y:\\dkj....\\sdfisd\\sdfsdf\\asdfai"
}
现在搜索
POST my_index/test/_search
{
"query": {
"regexp" : {
"title" : {
"value" : ".*?[\\.]{4}.*",
"flags_value" : 0
}
}
}
返回空结果
但未分析的字段与regexp完美配合
POST my_index/test/_search
{
"query": {
"regexp" : {
"title_raw" : {
"value" : ".*?[\\.]{4}.*",
"flags_value" : 0
}
}
}
您可以查看documentation以了解其原因。因为您使用的是标准分析器,所以信息的一部分在索引阶段丢失,在搜索过程中不可用。