Spring Elasticsearch HashMap[String, String] 映射值不能是not_analyzed
Spring Elasticsearch HashMap[String, String] mapping value cannot be not_analyzed
其实我的问题很简单:我想要我的hashmap值not_analyzed!
现在我有一个对象包含一个 hashmap[string, string],看起来像:
class SomeObject{
String id;
@Field(type=FieldType.Object, index=FieldIndex.not_analyzed)
Map<String, String> parameters;
}
然后 Spring 数据 elasticsearch 在开始时生成这样的映射:
{
"id": {
"type": "string"
},
"parameters": {
"type": "object"
}
}
然后在我向 es 添加一些对象后,它会添加更多属性,如下所示:
{
"id": {
"type": "string"
},
"parameters": {
"properties": {
"shiduan": {
"type": "string"
},
"季节": {
"type": "string"
}
}
}
}
现在因为解析了参数的值,所以不能用es搜索,我是说不能搜索中文值,我试过这时候可以搜索英文了。
然后,在阅读此 POST 之后,我将映射手动更新为:
{
"id": {
"type": "string"
},
"parameters": {
"properties": {
"shiduan": {
"type": "string",
"index": "not_analyzed"
},
"季节": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
我现在可以搜索中文了,所以我知道问题出在"not_analyzed",就像POST所说的那样。
最后,谁能告诉我如何制作地图值"not_analyzed",我用了google和Whosebug很多次仍然找不到答案,如果有人能帮忙请告诉我,谢谢非常喜欢。
实现此目的的一种方法是在构建路径上创建一个 mappings.json
文件(例如 yourproject/src/main/resources/mappings
),然后在 [=25] 中使用 @Mapping
注释引用该映射=].
@Document(indexName = "your_index", type = "your_type")
@Mapping(mappingPath = "/mappings/mappings.json")
public class SomeObject{
String id;
@Field(type=FieldType.Object, index=FieldIndex.not_analyzed)
Map<String, String> parameters;
}
在该映射文件中,我们将添加一个 dynamic template,它将以您的 parameters
哈希映射的子字段为目标,并将它们声明为 not_analyzed
字符串。
{
"mappings": {
"your_type": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"path_match": "parameters.*",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
您需要确保先删除 your_index
,然后重新启动您的应用程序,以便使用正确的映射重新创建它。
其实我的问题很简单:我想要我的hashmap值not_analyzed!
现在我有一个对象包含一个 hashmap[string, string],看起来像:
class SomeObject{
String id;
@Field(type=FieldType.Object, index=FieldIndex.not_analyzed)
Map<String, String> parameters;
}
然后 Spring 数据 elasticsearch 在开始时生成这样的映射:
{
"id": {
"type": "string"
},
"parameters": {
"type": "object"
}
}
然后在我向 es 添加一些对象后,它会添加更多属性,如下所示:
{
"id": {
"type": "string"
},
"parameters": {
"properties": {
"shiduan": {
"type": "string"
},
"季节": {
"type": "string"
}
}
}
}
现在因为解析了参数的值,所以不能用es搜索,我是说不能搜索中文值,我试过这时候可以搜索英文了。
然后,在阅读此 POST
{
"id": {
"type": "string"
},
"parameters": {
"properties": {
"shiduan": {
"type": "string",
"index": "not_analyzed"
},
"季节": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
我现在可以搜索中文了,所以我知道问题出在"not_analyzed",就像POST所说的那样。
最后,谁能告诉我如何制作地图值"not_analyzed",我用了google和Whosebug很多次仍然找不到答案,如果有人能帮忙请告诉我,谢谢非常喜欢。
实现此目的的一种方法是在构建路径上创建一个 mappings.json
文件(例如 yourproject/src/main/resources/mappings
),然后在 [=25] 中使用 @Mapping
注释引用该映射=].
@Document(indexName = "your_index", type = "your_type")
@Mapping(mappingPath = "/mappings/mappings.json")
public class SomeObject{
String id;
@Field(type=FieldType.Object, index=FieldIndex.not_analyzed)
Map<String, String> parameters;
}
在该映射文件中,我们将添加一个 dynamic template,它将以您的 parameters
哈希映射的子字段为目标,并将它们声明为 not_analyzed
字符串。
{
"mappings": {
"your_type": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"path_match": "parameters.*",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
您需要确保先删除 your_index
,然后重新启动您的应用程序,以便使用正确的映射重新创建它。