为什么其中一个响应字段具有“ _id”字段的值?

时间:2018-11-23 07:57:26

标签: java elasticsearch

我正在使用Elasticsearch Java API,但遇到了奇怪的问题。

下面是存储的数据:

"_index": "my_index",
"_type": "SEC",
"_id": "1111111111111111",
"_score": 0,
"_source": {
  "LOG_NO": 2222222222222222
}

然后我像下面这样调用请求:

QueryBuilder queryBuilder = QueryBuilders.boolQuery().filter(query);
request.setQuery(queryBuilder);
SearchResponse searchResponse = request.get();

这是搜索响应:

"_index":"my_index",
"_type":"SEC",
"_id":"1111111111111111",
"_score":null,
"_source": {
    "LOG_NO":1111111111111111,
}

如您所见,响应的“ LOG_NO”应为“ 2222222222222222”而不是“ 1111111111111111”。

参数“ query”是QueryBuilder,值如下:

{
  "bool": {
    "must": [
      {
        "range": {
          "LOG_GEN_TIME": {
            "from": "2018-11-01 00:00:00+09:00",
            "to": "2018-11-01 23:59:59+09:00",
            "include_lower": true,
            "include_upper": true,
            "boost": 1
          }
        }
      },
      {
        "bool": {
          "must": [
            {
              "term": {
                "ASSET_IP": "xx.xxx.xxx.xxx"
              }
            },
            {
              "term": {
                "DST_PORT": "xx"
              }
            }
          ]
        }
      }
    ],
    "adjust_pure_negative": true,
    "boost": 1
  }
}

我不明白是什么问题。

任何评论将不胜感激,

-为@Val编辑

    "_index": "my_index",
    "_type": "SEC",
    "_id": "9197340043548295192",
    "_score": null,
    "_source": {
      "ASSET_IP": "xx.xxx.xx.xxx",
      "LOG_NO": 9197340043548295200,
      "LOG_GEN_TIME": "2018-11-01 23:10:53+09:00",
      "SRC_IP": "xx.xxx.xx.xxx",
      "SRC_PORT": xx,
      "DST_IP": "xx.xxx.xx.xxx",
      "DST_PORT": xx,
      "DESCRIPTION": "log",
      "DST_NATION_CD": "USA",
    }
  }

这是我希望返回的完整文档,唯一的“ LOG_NO”字段会造成问题。

1 个答案:

答案 0 :(得分:0)

我发现问题是javascript。

由于JS无法表达超出数字范围的参数,因此对其进行了转换。

我的ES设置是将整数字段“ LOG_NO”设置为索引,而“ _id”是字符串表达式“ LOG_NO”。

所以没有问题,只不过整数在网络上看起来不同。

希望其他人不会遇到同样的问题。