如何指定ElasticSearch副本
ElasticSearch能够将值复制到其他字段(在索引时间),使您能够在多个字段上搜索,就好像它是一个字段(核心类型:copy_to)。
但是,似乎没有办法指定应该复制这些值的顺序。 当词组匹配时,这可能很重要:
curl -XDELETE 'http://10.11.12.13:9200/helloworld'
curl -XPUT 'http://10.11.12.13:9200/helloworld'
# copy_to is ordered alphabetically!
curl -XPUT 'http://10.11.12.13:9200/helloworld/_mapping/people' -d '
{
"people": {
"properties": {
"last_name": {
"type": "string",
"copy_to": "full_name"
},
"first_name": {
"type": "string",
"copy_to": "full_name"
},
"state": {
"type": "string"
},
"city": {
"type": "string"
},
"full_name": {
"type": "string"
}
}
}
}
'
curl -X POST "10.11.12.13:9200/helloworld/people/dork" -d '{"first_name": "Jim", "last_name": "Bob", "state": "California", "city": "San Jose"}'
curl -X POST "10.11.12.13:9200/helloworld/people/face" -d '{"first_name": "Bob", "last_name": "Jim", "state": "California", "city": "San Jose"}'
curl "http://10.11.12.13:9200/helloworld/people/_search" -d '
{
"query": {
"match_phrase": {
"full_name": {
"query": "Jim Bob"
}
}
}
}
'
只有“吉姆鲍勃”被返回; 似乎这些字段是按照字段名称的字母顺序复制的。
我将如何切换copy_to命令以便返回“Bob Jim”人员?
这通过在映射中注册转换脚本来进行更确定的控制。
像这样的东西:
"transform" : [
{"script": "ctx._source['full_name'] = [ctx._source['first_name'] + " " + ctx._source['last_name'], ctx._source['last_name'] + " " + ctx._source['first_name']]"}
]
此外,转换脚本可以是“native”(即java
代码),通过在elasticsearch classpath中提供自定义类并通过设置将其注册为本机脚本,可以使群集中的所有节点都可用:
script.native.<name>.type=<fully.qualified.class.name>
在这种情况下,在您的映射中,您会将原生脚本注册为如下所示的转换:
"transform" : [
{
"script" : "<name>",
"params" : {
"param1": "val1",
"param2": "val2"
},
"lang": "native"
}
],
链接地址: http://www.djcxy.com/p/25525.html