ES中,一份数据只能有一个mapping定义结构,所以想对同一份数据生成两份倒排是不可能的。目前想到的办法是,在这一份mapping里,对需要建倒排的字段建多个field,每个field使用不同的分词器,在查询时指定query要用什么分词器切query,查字段的哪个field。
PUT http://localhost:9200/test_multifields
{
"mappings": {
"properties": {
"title": {
"type": "text",
"fields": {
"test_lac": {
"type": "text",
"analyzer": "lac"
},
"test_ik": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
}
}
POST http://localhost:9200/test_multifields/_doc/1
{
"title": "中国铁路兰州局集团有限公司企业年金计划南方组合 今日正式成立"
}
POST http://localhost:9200/test_multifields/_search
{
"query": {
"query_string": {
"query": "铁路",
"default_field": "title.test_lac",
"analyzer": "lac"
}
}
}