java - 范围查询不适用于 Elasticsearch 6.1.2 中的文本数字

标签 java elasticsearch text range textfield

我尝试在elasticsearch 6.1.2中搜索以下案例

我创建了一个带有文本类型的变量“rangeField”并插入了以下记录。

rangeField : "1"
rangeField : "2"
rangeField : "3"
    .
    .
    .
rangeField : "12"

我尝试过以下测试用例

案例1: 使用范围查询从 1 到 5 进行搜索,它返回记录 rangeField 1,11,12,2,3,4,5。

案例2: 使用从 1 到 11 的范围查询进行搜索,它返回记录 rangeField 1,11。

案例3: 使用从 1 到 23 的范围查询进行搜索,它返回记录 rangeField 1,11,12,2。

案例4: 使用从 1 到 30 的范围查询进行搜索,它返回记录 rangeField 1,11,12,2,3。

我需要正确找到范围,

我一直使用“rangeField”作为文本,因为为了支持术语查询,

Elasticsearch 6.1.2

非常感谢任何帮助。

最佳答案

如果您将字段 rangeField 的数据类型从 text 更改为 integer,您就能够执行您需要的两个查询。将 1 索引为文本将具有与您实验过的 range([a-z]) 相同的行为。但是,如果您要更改映射,修改 integer 中的 dateField 数据类型,您将改进精确值的术语查询:

{
     "query" :
       { "term" : { "rangeField" : 1 } } 
}

范围查询:

{
    "query": {
        "range" : {
            "rangeField" : {
                "gte" : 10,
                "lte" : 20
            }
        }
    }
}

关于java - 范围查询不适用于 Elasticsearch 6.1.2 中的文本数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49255394/

相关文章:

java - 在同一个 jScrollPane 中制作两个表

java - 在 Java 中将列表复制回数组的时间复杂度是多少,反之亦然?

elasticsearch - ElasticSearch distanceInKm 返回错误的距离

java - Spark-如何将每n行写入不同的输出文件?

java - 处理(Drop and Log) Kafka producer 发布的不良数据,这样 Spark (Java) Consumer 不会将其存储在 HDFS 中

indexing - 重新启动Elasticsearch时为什么会显示已删除的索引?

python - elasticsearch.exceptions.RequestError : RequestError(400, 'mapper_parsing_exception', 'No handler for type [string] declared on field [texts]')

双引号之间的 JavaScript 文本

batch-file - 如何使用cmd从文本文件中删除第一行?

php - 使用 php 对大型词典执行搜索