请教一下,搜索关键字分词后,只有其中一个分词参与了字段打分,但是该字段中包含了多个分词的,怎么处理能让多个分词都参与该字段的打分?
Elasticsearch | 作者 XZ | 发布于2019年09月21日 | 阅读数:1179
案例:ES中字段"productName":"时尚版nike运动鞋",搜索关键字为:nike运动鞋,分词后为:NIKE,运动鞋
查看结果打分时,只有其中一个分词NIKE参与了字段productName的匹配打分
使用分词器:ik_syn_smart
我这里使用的是“query_string”查询,指定了多个字段,
“query_string”: {
"query": "nike运动鞋",
"fields": [
"productName^2.0",
"productBrandName^2.0",
"searchKeywords^3.0"
],
"use_dis_max": false,
"tie_breaker": 0.0,
"default_operator": "or",
"analyzer": "ik_syn_smart",
"auto_generate_phrase_queries": false,
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"split_on_whitespace": true,
"boost": 1.0
}
搜索关键字分词后为:NIKE,运动鞋
productName分词后为:时尚版,NIKE,运动鞋
评分时应该是NIKE和运动鞋都参与评分,可实际上只有NIKE参与了评分,怎么处理???
查看结果打分时,只有其中一个分词NIKE参与了字段productName的匹配打分
使用分词器:ik_syn_smart
我这里使用的是“query_string”查询,指定了多个字段,
“query_string”: {
"query": "nike运动鞋",
"fields": [
"productName^2.0",
"productBrandName^2.0",
"searchKeywords^3.0"
],
"use_dis_max": false,
"tie_breaker": 0.0,
"default_operator": "or",
"analyzer": "ik_syn_smart",
"auto_generate_phrase_queries": false,
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"split_on_whitespace": true,
"boost": 1.0
}
搜索关键字分词后为:NIKE,运动鞋
productName分词后为:时尚版,NIKE,运动鞋
评分时应该是NIKE和运动鞋都参与评分,可实际上只有NIKE参与了评分,怎么处理???
1 个回复
core_wzw - 某AILab搜索技术负责人
赞同来自:
query_string默认是把多field当_all查,所以_all分词后是否还有“运动鞋”你得确认下。
但是,为什么不用“multi_match”试试?我从来不用query_string。