elasticsearch - Elasticsearch:筛选文档字段值中的子字符串?

标签 elasticsearch

我是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/

相关文章:

elasticsearch - 未应用自定义索引模板

ruby-on-rails - 如何在SearchKick中搜索一列

Java 实体未映射到 ElasticSearch GeoPoint 属性

elasticsearch - Elasticsearch-映射VS映射?

rest - 预期 [START_OBJECT] 在 [filter] 下

ruby-on-rails - 如何仅对特定用户的记录执行 ElasticSearch 查询(Rails Tire gem)

indexing - ElasticSearch获取嵌套属性的值

elasticsearch - (kibana)mapper_parsing_exception

elasticsearch - ElasticSearch Alias是否更改基础索引文件

elasticsearch - 如何在match_all elasticsearch中增加字段