同事。我正在使用 5.4.3 和analysis-morphology 5.4.3
POST /categories/_close
PUT categories/_settings
{"settings": {
"index": {
"analysis" : {
"analyzer" : {
"my_search_analyzer" : {
"type": "custom",
"tokenizer" : "standard",
"filter" : ["lowercase", "search_synonym","russian_morphology", "english_morphology", "ru_stopwords", "russian"]
}
},
"filter" : {
"search_synonym" : {
"ignore_case" : "true",
"type" : "synonym",
"synonyms" : ["пончо,накидка"]
},
"ru_stopwords" : {
"type" : "stop",
"stopwords" : "а,без,более,бы,был,была,были,было,быть,в,вам,вас,весь,во,вот,все,всего,всех,вы,где,да,даже,для,до,его,ее,если,есть,еще,же,за,здесь,и,из,или,им,их,к,как,ко,когда,кто,ли,либо,мне,может,мы,на,надо,наш,не,него,нее,нет,ни,них,но,ну,о,об,однако,он,она,они,оно,от,очень,по,под,при,с,со,так,также,такой,там,те,тем,то,того,тоже,той,только,том,ты,у,уже,хотя,чего,чей,чем,что,чтобы,чье,чья,эта,эти,это,я,a,an,and,are,as,at,be,but,by,for,if,in,into,is,it,no,not,of,on,or,such,that,the,their,then,there,these,they,this,to,was,will,with"
}
}
}
}
},
"mappings": {
"mydoc_data": {
"properties": {
"title": {
"type": "string",
"analyzer": "my_search_analyzer"
},
"description": {
"type": "string",
"analyzer": "my_search_analyzer"
}
}
}
}
}
POST /categories/_open
"acknowledged": true
我正在寻找的结果是这样的:
GET /categories/_search/
{
"query":{
"match": {
"_all": "накидка"
}
}
}
"cape" - 没有找到 "cape" - 找到
我正在寻找的文件:
{
"took": 23,
"timed_out": false,
"_shards": {
"total": 11,
"successful": 11,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 5.8937645,
"hits": [
{
"_index": "categories",
"_type": "categories",
"_id": "7672",
"_score": 5.8937645,
"_source": {
"title": "Накидки",
"code": "nakidki",
"parent_id": 7668,
"lft": 15343,
"rgt": 15344,
"updated_at": "2017-07-04 11:40:43",
"created_at": "2017-07-04 11:40:43",
"id": 7672
}
},
{
"_index": "categories",
"_type": "categories",
"_id": "5682",
"_score": 5.115262,
"_source": {
"title": "Чехлы и накидки на сиденья",
"code": "chehlyi-i-nakidki-na-sidenya",
"parent_id": 5676,
"lft": 11363,
"rgt": 11364,
"updated_at": "2017-07-04 11:37:34",
"created_at": "2017-07-04 11:37:34",
"id": 5682
}
}
]
}
}
我究竟做错了什么?
_all 将其他字段的值以空格作为分隔符进行组合,并使用标准解析器进行解析。标准分析器不会将“斗篷”变成“斗篷”。在这种情况下映射不起作用。
如果您在标题中写入“ Covers and seat covers ”,那么以下标记“and”、“on”、“covers”、“seats”、“covers”将归入_all。匹配 "match": {"_all": "cloak "} 将不会被找到。
解决方案
如果您想使用解析器,那么您需要在特定字段上使用搜索,例如,使用multi_match,而不是在 __all 上。
在这里您可以微调您的搜索。我还建议在查询中使用与索引时相同的分析器。这对于拆分成相同的令牌是必要的。
将“russian_morphology”解析器与“russian”一起使用是个坏主意。在他看来,俄语通常会把话说得太过分,直截了当。您需要留下一件事,很可能是“russian_morphology”。否则的话,很难弄明白这个字为什么会变成这么复杂的信物。
我们检查:
我更喜欢第二种选择。