es2.x版本
使用n- gram
使用的索引
将查询 修改为如下:
请教各位大神应该怎么做啊。谢谢。
使用n- gram
使用的索引
PUT /animal
{
"settings": {
"analysis": {
"filter": {
"trigrams_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram": 50
}
},
"analyzer": {
"trigrams": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"trigrams_filter"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"name": {
"type": "string",
"analyzer": "trigrams"
}
}
}
}
}
查询语句GET /animal/_search
{
"explain": false,
"query": {
"match": {
"name": {
"query": "ad",
"operator": "and"
}
}
}
}
使用如 上查询语句不会 将完全匹配的ad 放到最前面。将查询 修改为如下:
GET /animal/_search
{
"explain": true,
"query": {
"function_score": {
"query": {
"match": {
"name": {
"query": "ad",
"operator": "and"
}
}
},
"script_score": {
"lang":"groovy",
"script": "user = doc['name'].value;factor = user.startsWith('ad')?1.1 :1.0;return _score * factor;"
}
}
}
}
还是不行请教各位大神应该怎么做啊。谢谢。
4 个回复
rochy - rochy_he
赞同来自:
你这里设置 50 个人感觉很不妥,没什么用,还非常占空间,同时索引速度也慢
搜索的时候使用 matchPhraseQuery
cnlinjie
赞同来自:
cnlinjie
赞同来自:
我给title 加了个子字段。
cnlinjie
赞同来自:
说实话,这个方案本身好像有点小问题,但因为项目扑街,后续就没继续深入了,所以忘记是什么问题了。
我把当时的mapping.json文件导了出来,放在了附件里面,有需要参考的朋友可以看看。
字段我记得是title 那边。
具体的是: