在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

es中文查询不成功

Elasticsearch | 作者 zhangpan | 发布于2017年09月08日 | 阅读数:12676

我使用的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完美解决这个问题。
已邀请:

Cheetah

赞同来自: zhangpan

查询单个中文能查询出来,这里明显你采用的是标准分词器,将你的内容分成了一个一个的字,那么你查询单个中文能查询出来不奇怪
你搜索这是等查询不出来,那么你这里你确认你采用的是分词查询?我估计你采用的是精确查找,比如term查询,那么相当于你去找你的内容里是否存在“一条”这个词,但是你的内容已经变成了“一”和“条”,在这种情况之下,你如何能查询到呢
想要查询到也有办法的,采用matchparse查询(查询分词),他将先把你查询的“一条”变成“一”和“条”再进行查询

novia - 1&0

赞同来自:

1、给出mapping设计
2、给出查询语句
 
方便定位问题

401825317 - 90后it男

赞同来自:

跟查询语句有关系,match和match_phrase就不一样;跟分词有关系,如果分词中不包含“”这是一“”那么也搜不到

要回复问题请先登录注册