我是Elasticsearch的新手。我对字符串字段具有以下映射:
"ipAddress": {
"type": "string",
"store": "no",
"index": "not_analyzed",
"omit_norms": "true",
"include_in_all": false
}
ipAddress字段中具有值的文档如下所示:
"ipAddress": "123.3.4.12 134.4.5.6"
请注意,以上有两个IP地址,中间用空格分隔。
现在,我需要根据此字段过滤文档。这是一个示例过滤器值
123.3.4.12
过滤器值始终是单个IP地址,如上所示。
我在看过滤器
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filters.html
而且我似乎无法为此找到合适的过滤器。我尝试了过滤器一词,
{
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter": {
"term" : { "ipAddress" : "123.3.4.12" }
}
}
}
}
但是似乎只有在过滤器值100%与文档字段的值匹配时,它才返回文档。
有人可以帮我吗?
更新:
根据John Petrone的建议,我通过定义基于空白标记器的分析器来使其工作,如下所示:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"blank_sep_analyzer": {
"tokenizer": "whitespace"
}
}
}
}
},
"mappings": {
"ipAddress": {
"type": "string",
"store": "no",
"index": "analyzed",
"analyzer": "blank_sep_analyzer",
"omit_norms": "true",
"include_in_all": false
}
}
}
最佳答案
问题是没有对该字段进行分析,因此如果其中有2个IP地址,则该术语实际上是完整字段,例如“123.3.4.12 134.4.5.6”。
我建议采用另一种方法-如果您总是要用空格分隔IP地址列表,请考虑使用空白标记生成器将标记创建为空白-应该创建几个与IP地址匹配的标记:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-whitespace-tokenizer.html
关于elasticsearch - Elasticsearch:筛选文档字段值中的子字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24856607/