采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师 ,比如match_phrase我想匹配到“中文”,但“中文字”,“学中文”,“学中文字”也被匹配到了,有没有办法只匹配到“中文”
es是基于分词存储的,你这里能搜索到是因为保存到es中的时候这个字段会默认被分词,然后你搜索的时候就会出现把你的query分词之后去和这个字段匹配,但是很多时候某些字段你不希望被分词,比如用户姓名就不能分词,这个时候你只要在mapping中将这个字段设置为keyword类型,那么es保存和搜索的时候就不会分词而是和mysql的等于一样全匹配了
但是我那个字段是由好几个不同姓名通过分隔符组成的字符串,就像这样,“林建生,张三,王五”,我要搜索含“林建”这个人的字段,用match_phrase会把“林建生”那个字段也搜出来,另外,我自定义了分词,所有汉字都被分成一个字一个字的
这种你就应该事先处理好,比如自己先通过逗号分隔,然后分成多个次放入到一个数组中,可以参考这个 https://www.cnblogs.com/lovezbs/p/13790685.html
这样也不行把,比如两条原始数据, 1、{"uname": "林建生"},存储时前转为{"uname": ["林", "建", "生"]} 2、{"uname": "林建"},存储时前转为{"uname": ["林", "建"]} 搜索时我要得到"林建"这个人的数据,但按下面的也会把林建生那个人的数据搜出来 { "query": { "bool": { "must": [ { "term": { "uname": "林" } }, { "term": { "uname": "建" } } ] } } }
登录后可查看更多问答,登录/注册
带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎
4.9k 30
2.7k 18
1.3k 18
1.5k 15
3.0k 15
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号