通过spring-data-elasticsearch注释添加null_value

时间:2017-10-20 11:34:24

标签: elasticsearch spring-boot spring-data spring-data-elasticsearch

我想使用spring-data-elasticsearch-2.1.0创建如下所示的用户索引。注解。 我无法找到任何注释来添加“null_value”:“NULL”。这是必需的,因为我们的排序顺序失败。

"user": {
    "properties": {
      "firstName": {
        "type": "string"
      },
      "lastName": {
        "type": "string"
      },
      "displayName": {
        "type": "string",
        "analyzer": "word_analyzer",
        "fields": {
          "raw": {
            "type": "string",
            "index": "not_analyzed",
            "null_value": "NULL"
          }
        }
      }
    }
  }

域类

 private String firstName;
 private String lastName;
 @MultiField(
         mainField = @Field(type = FieldType.String, analyzer = "word_analyzer"),
         otherFields = {
               @InnerField(suffix = "raw", type = FieldType.String, index = FieldIndex.not_analyzed)
                }
)
private String displayName;

如何通过InnerField中的spring-data-elasticsearch注释添加“null_value”:“NULL”?我不想在外部创建索引映射。

2 个答案:

答案 0 :(得分:1)

现在只能通过@Mapping注释实现。使用映射定义创建JSON文件:

{
  "type": "string",
  "index": "analyzed",
  "analyzer": "word_analyzer",
  "fields": {
    "raw": {
      "type": "string",
      "index": "not_analyzed",
      "null_value": "NULL"
    }
  }
}

并将其保存在资源文件夹中。在此示例中,我将其保存在resources/elastic/document_display_name_mapping.json

使用@Mapping注释

注释字段
@Mapping(mappingPath = "elastic/document_display_name_mapping.json")
private String displayName;

答案 1 :(得分:0)

参考https://jira.spring.io/browse/DATAES-312

这是一个未解决的问题(固定但未合并)。 这可以通过在排序选项中添加“missing”:“_last”/“_ first”和“unmapped_type”来处理。

参考: - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_ignoring_unmapped_fields

这些选项(“缺失”,“unmapped_type”,“模式”)不可用。

设置“null_value”:“NULL”在字符串字段中没有正确的排序顺序。

“null_value”:“0”可以满足整数字段的排序顺序。

是否可以在设置本身中执行某些操作来实现一个用例 usecase - 如果排序方向是ASC然后“丢失”:“_ first”,如果排序方向是DESC,那么“missing”:“_last”..可以应用于原始字段。