有个人长的像洋葱,走着走着就哭了…….

有大佬研究过同一个字段通过multi_field做多个分词器的case吗

Elasticsearch | 作者 God_lockin | 发布于2019年01月25日 | 阅读数:3999

对于同一个检索条件需要同时做keyword完全匹配、某一到多个分词器的模糊匹配…
 
那么对于整个query来说,打分、排序啥的是怎么做的呢?

有大佬研究过的可以贴贴答案交流下,没有的话只好等我自己研究完了再过来贴结论了~ :)
 用了medcl大佬的IK分词器和我自己前两天弄出来的StanfordNLP分词器,正在搭环境实验Rocky大佬弄的HanLP分词器,突然想到这么一问题
 
ref:mappings
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1
},
"mappings": {
"_doc": {
"properties": {
"id": {
"type": "integer"
},
"text": {
"type": "text",
"fields": {
"stanford": {
"type": "text",
"analyzer": "stanford-core-nlp",
"search_analyzer": "stanford-core-nlp"
},
"ik": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text"
}
}
}
}
}
}
}
query
{
"query": {
"multi_match": {
"query": "汽车延保值得买吗",
"fields": [
"text",
"text.ik",
"text.stanford"
]
}
}
}
已邀请:

rochy - rochy_he

赞同来自:

对于 multi-field 的 best_fields 模式(默认模式)来说,
对每个字段对查询分别进行打分,然后执行 max 运算获取打分最高的
 
请参考文章:https://blog.csdn.net/ginobefu ... 61660

端小强 - 90后Java

赞同来自:

恰好我们的需求跟你说的有点类似,name字段全文检索,code字段ngram实现模糊匹配,name.pingyin用于拼音搜索,由于我们要求查询关键词分词结果必须全部匹配上,所以选择cross_fields,统一使用ik分词,对关键词进行拆分。
参考文档:https://www.elastic.co/guide/e ... .html
{
"multi_match":{
"query":"${keyWord}",
"fields":[
"name",
"name.pinyin",
"brand",
"brand.pinyin",
"spec",
"customCode",
"supplierCode"
],
"type":"cross_fields",
"operator":"and",
"analyzer":"ik_smart"
}
}

God_lockin

赞同来自:

我们的搜索场景还不是很一样…
 
我们是不确定输入的是什么鬼,这个有可能能完全匹配title字段,或者部分匹配content字段,或者部分匹配keyword字段,然鹅前置的搜索语句分析服务会有一套骚操作把原始的query语句分析出一大堆有的没的东西
 
所以我需要的是对不同的分词甚至query方式综合打分,然后返回一个最佳匹配的顺序回去

要回复问题请先登录注册