软件版本;ES 6.3.2
运行环境;CentOS6
需求:
页面上有个搜索框,用户可以输入table_name、comments查找
索引:
我创建了一个索引,两个字段:
1. table_name字段:分词:下划线;示例:s_amap_userid_idbank
2. comments字段:分词IK中文分词;示例:从前有座山
输入:
用户输入:”s_amap_userid_idbank 用户数据“,前面为table name 后面为comments(也可以只输入name或者comments)
检索语句:
GET my_tables/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"table_name": { "query": "s_amap_userid_idbank 用户数据", "boost": 2 }
}
} ,
{
"match_phrase": {
"comments": {"query": "s_amap_userid_idbank 用户数据"} }
}
]
}
}
}
问题:
如果table_name使用match_phrase,则检索不到东西(因为输入里面有comments)
如果table_name改为match,则会检索到大量相关性很低的结果
请教各位,谢谢
运行环境;CentOS6
需求:
页面上有个搜索框,用户可以输入table_name、comments查找
索引:
我创建了一个索引,两个字段:
1. table_name字段:分词:下划线;示例:s_amap_userid_idbank
2. comments字段:分词IK中文分词;示例:从前有座山
输入:
用户输入:”s_amap_userid_idbank 用户数据“,前面为table name 后面为comments(也可以只输入name或者comments)
检索语句:
GET my_tables/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"table_name": { "query": "s_amap_userid_idbank 用户数据", "boost": 2 }
}
} ,
{
"match_phrase": {
"comments": {"query": "s_amap_userid_idbank 用户数据"} }
}
]
}
}
}
问题:
如果table_name使用match_phrase,则检索不到东西(因为输入里面有comments)
如果table_name改为match,则会检索到大量相关性很低的结果
请教各位,谢谢
3 个回复
heipark
赞同来自: tacsklet
第一次:通过match_parase 只查询table name,这样99%的场景可以获得精准的匹配
如果第一次返回空,则通过match同时查询table name和 comment。
envy666
赞同来自:
tacsklet - 公司有用到es
赞同来自: