我使用的analyzer type是custom, tokenizer是 keyword ,filter是lowercase.
这是为了在查询英文时不区分大小写。英文数字什么的查询都没问题。
但是在查询中文内容的数据时:
比如数据内容是:这是一条测试数据。
单独搜索每个中文字都可以查出来,但是搜索 这是, 一条, 这是一..等等多个中文字是查找不到数据。请问这是怎么回事呢?
创建索引的语句:curl -XPUT 'http://localhost:9400/myindexname?pretty' -H'Content-Type:application/json' -d '{"settings": {"analysis": {"analyzer": {"my_analyzer": {"type":"custom","tokenizer": "keyword","filter": "lowercase"}}},"index":{"max_result_window":1000000}},"mappings":{"dataset":{"dynamic_templates":[{"analyzedmydata":{"match":"*","match_mapping_type":"text","mapping":{"index":"analyzed","analyzer":"my_analyzer","type":"text"}}}],"properties":{"fields":{"type":"nested"}}}}}'
=======问题解决方案=======
经过改动查询,使用match_phrase完美解决这个问题。
这是为了在查询英文时不区分大小写。英文数字什么的查询都没问题。
但是在查询中文内容的数据时:
比如数据内容是:这是一条测试数据。
单独搜索每个中文字都可以查出来,但是搜索 这是, 一条, 这是一..等等多个中文字是查找不到数据。请问这是怎么回事呢?
创建索引的语句:curl -XPUT 'http://localhost:9400/myindexname?pretty' -H'Content-Type:application/json' -d '{"settings": {"analysis": {"analyzer": {"my_analyzer": {"type":"custom","tokenizer": "keyword","filter": "lowercase"}}},"index":{"max_result_window":1000000}},"mappings":{"dataset":{"dynamic_templates":[{"analyzedmydata":{"match":"*","match_mapping_type":"text","mapping":{"index":"analyzed","analyzer":"my_analyzer","type":"text"}}}],"properties":{"fields":{"type":"nested"}}}}}'
=======问题解决方案=======
经过改动查询,使用match_phrase完美解决这个问题。
3 个回复
Cheetah
赞同来自: zhangpan
你搜索这是等查询不出来,那么你这里你确认你采用的是分词查询?我估计你采用的是精确查找,比如term查询,那么相当于你去找你的内容里是否存在“一条”这个词,但是你的内容已经变成了“一”和“条”,在这种情况之下,你如何能查询到呢
想要查询到也有办法的,采用matchparse查询(查询分词),他将先把你查询的“一条”变成“一”和“条”再进行查询
novia - 1&0
赞同来自:
2、给出查询语句
方便定位问题
401825317 - 90后it男
赞同来自: