elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

Lucene ElasticSearch:根据字段长度过滤文档?

Lucene ElasticSearch:根据字段长度过滤文档?,lucene,elasticsearch,Lucene,elasticsearch,有没有办法根据特定字段的长度过滤ElasticSearch文档 例如,我有一堆字段为“body”的文档,我只想返回body中字符数大于1000的结果。有没有一种方法可以在ES中执行此操作,而不必在索引中添加长度为的额外列?使用脚本过滤器,如下所示: "filtered" : { "query" : { ... }, "filter" : { "script" : { "script" : "doc['body'].

有没有办法根据特定字段的长度过滤ElasticSearch文档


例如,我有一堆字段为“body”的文档,我只想返回body中字符数大于1000的结果。有没有一种方法可以在ES中执行此操作,而不必在索引中添加长度为的额外列?

使用脚本过滤器,如下所示:

"filtered" : {
    "query" : {
        ...
    }, 
    "filter" : {
        "script" : {
            "script" : "doc['body'].length > 1000"
        }
    }
}
编辑
抱歉,您还可以创建自定义标记器,并在多字段属性中使用它,如下所示:

PUT test_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "character_analyzer": {
          "type": "custom",
          "tokenizer": "character_tokenizer"
        }
      },
      "tokenizer": {
        "character_tokenizer": {
          "type": "nGram",
          "min_gram": 1,
          "max_gram": 1
        }
      }
    }
  }, 
  "mappings": {
    "person": {
      "properties": {
        "name": { 
          "type": "text",
          "fields": {
            "keyword": { 
              "type": "keyword"
            },
            "words_count": { 
              "type": "token_count",
              "analyzer": "standard"
            },
            "length": { 
              "type": "token_count",
              "analyzer": "character_analyzer"
            }
          }
        }
      }
    }
  }
}

PUT test_index/person/1
{
  "name": "John Smith"
}

PUT test_index/person/2
{
  "name": "Rachel Alice Williams"
}

GET test_index/person/_search
{
  "query": {
    "term": {
      "name.length": 10
    }
  }
}

没有提到
.length
字段,这仍然有效吗?假设,如果显式启用脚本支持,这仍然有效(我相信在v1.4中默认禁用了脚本)。现在使用的是Groovy脚本,而不是MVEL,所以您可能希望了解这一点。提到你可以使用
“script”:“doc['body'].value.length()”
在1.7.5link上对我有效,我认为这是不好的