我有一个简单的ES文档,使用Spring弹性搜索进行注释:
@Document(indexName = "indexName", type = "metadata")
public class EsMetadata {
@Id
@NonNull
@Field(type = FieldType.keyword)
String metadataId;
@NonNull
@Field(type = FieldType.keyword)
String assetId;
}
这两个字符串通常由UUID字符串表示,其中包含连字符。在尝试搜索特定的UUID时,我遇到了此处提到的问题:Elastic Search Hyphen issue with term filter
解决方案(或解决方法)是将FieldType设置为keyword
在assetId
字段上,但不在metadataId
字段上 - 显然是因为它标记为{{1 }}
当我致电@Id
时,我收到了一些IllegalArgumentExceptions:
this.esTemplate.putMapping(EsMetadata.class)
我使用Caused by: java.lang.IllegalArgumentException: Could not convert [metadataId.index] to boolean
Caused by: java.lang.IllegalArgumentException: Failed to parse value [not_analyzed] as only [true] or [false] are allowed.
和9515882b-f583-4675-bc19-44c9247c0365
作为示例UUID,其中部分等于正确测试所需行为。
当我从bc205f3e-35c2-f583-835c-344a9f89d758
删除@Field(type = FieldType.keyword)
注释时,一切正常 - 除了在搜索特定的metadataId
UUID时我得到重复项。对于metadataId
UUID,没有重复 - 正如预期的那样。
如何在assetId
带注释的字段上使用keyword
FieldType,以便查找特定的UUID?或者我遇到了一个错误?
我使用spring-data-elasticsearch 3.1.0.M1和Elasticsearch 6.2.2