elasticSearch查询数据,模糊搜索无法查询出来

背景:

es在查询数据的时候,使用a字段查询可以看到b字段是有内容的,但是模糊匹配b字段,是查询不到数据的。

复现事件经过

第一种正常: select * from table where a like "%%";

结果,明显看到b存在内容:我是b字段

{

"a":"我是a字段",

"b":"我是b字段"

}

第二种不正常:select * from table where b like "%%";

没有命中

思考:

这是不是很不合理?

对不合理!

我有内容,你凭啥不查出来

原因:

设置es存储字段的时候有个ignore_above属性有问题,如果设置的过短,将会导致超过这个长度的数据都不被索引,所以查不出来

解决:

把ignore_above改长,解决问题。

这里还有个注意的点,被索引的数据也是从修改之后被索引,历史的数据仍然查不到

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "message": {
          "type": "keyword",
          "ignore_above": 20 
        }
      }
    }
  }
}

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Elasticsearch 中,可以使用模糊查询来搜索文本。模糊查询可以匹配与给定单词相似的单词,并允许一定程度的拼写错误和变化。这对于用户输入不确定的查询非常有用,例如搜索一个人名时可能会出现拼写错误。 Elasticsearch 支持多种模糊查询方式,包括: 1. 通配符查询:使用通配符匹配单词,例如使用 * 或 ? 来匹配任意字符或单个字符。例如,"luc*ne" 可以匹配 "Lucene"、"Lucine" 和 "Lucane" 等单词。 2. 模糊查询:使用 ~ 符号来执行模糊查询。例如,"lucene~" 可以匹配 "Lucene"、"Lucina" 和 "Lucerne" 等单词。 3. 首字母缩写查询:使用首字母缩写来匹配单词,例如使用 "lcn" 来匹配 "Lucene"。 4. 相似度查询:使用相似度算法来匹配单词,例如使用 "lucene~0.8" 来匹配相似度为 0.8 的单词,这意味着可以匹配拼写错误或变化程度小于 20% 的单词。 以下是一个使用模糊查询的例子: ``` GET /my_index/_search { "query": { "match": { "my_field": { "query": "lucene~", "fuzziness": "AUTO" } } } } ``` 在这个例子中,我们使用了 match 查询来匹配 "my_field" 字段中包含 "lucene" 的文档,并使用 fuzziness 参数来设置自动模糊度,允许一定程度的拼写错误。 ### 回答2: Elasticsearch是一个开源的分布式实时搜索和分析引擎,它提供了强大的搜索功能,其中包括文本模糊查询。 文本模糊查询是指当我们不完全了解查询条件时,仍然能够找到相关的结果。在Elasticsearch中,有几种方式可以实现文本模糊查询。 一种常用的模糊查询方式是使用通配符查询。通配符查询允许我们使用通配符*或?来替代一个或多个字符来模糊匹配查询条件。例如,如果我们想要查找包含以"elast"开头的文档,我们可以使用查询字符串"elast*"。 另一种常用的模糊查询方式是使用模糊查询模糊查询可以通过指定一个编辑距离来匹配相似的文档。编辑距离是指两个字符串之间需要进行的最少编辑操作次数,包括插入、删除和替换操作。例如,如果我们想要查找包含类似于"elasticserch"的文档,我们可以使用查询字符串"elasticserch~1",其中~1表示编辑距离为1。 此外,Elasticsearch还提供了n-grams和拼写纠正等技术来实现更精确的文本模糊查询。n-grams是指将文本分割成一系列连续的字符片段,而不仅仅是单词。这可以帮助我们在查询时考虑到拼写错误或输入错误的情况。在同样的道理下,拼写纠正可以自动纠正查询条件中的拼写错误,从而找到相关的结果。 总而言之,Elasticsearch提供了多种方式来实现文本模糊查询,包括通配符查询模糊查询、n-grams和拼写纠正等。通过这些功能,我们可以在不完全了解查询条件的情况下,仍然能够找到相关的结果,提高搜索的准确性和效率。 ### 回答3: Elasticsearch是一种分布式搜索引擎,能够对大量的数据进行快速和高效的查询。在Elasticsearch中,文本模糊查询是一种常用的搜索方式,它通过模糊匹配来找到与查询条件相匹配的文档。 文本模糊查询一般使用通配符、模糊匹配和正则表达式等技术来实现。通配符可以在查询条件中使用 '*'代表任意字符和 '?'代表单个字符。例如,如果要搜索包含关键字"apple"的文档,可以使用"appl\*e"作为查询条件,其中'*'表示可以匹配任意字符。模糊匹配则允许用户在查询条件中包含拼写错误或变体,以便能够找到相似的文档。例如,如果要搜索包含关键字"apple"的文档,但可能存在拼写错误,可以使用"aple~"作为查询条件,其中'~'表示执行模糊匹配。正则表达式是一种更复杂的模糊查询方式,可以根据具体需求来进行自定义的模式匹配。 Elasticsearch中的文本模糊查询可以通过使用查询字符串查询(query_string)或查询构造器查询(query builder)来实现。查询字符串查询是一种简洁的查询方式,而查询构造器查询则提供了更多的灵活性和控制力。 文本模糊查询Elasticsearch中常用的一种搜索方式,它能够帮助用户快速找到与查询条件相匹配的文档。通过使用通配符、模糊匹配和正则表达式等技术,我们可以进一步定制和优化查询的效果。无论是在日常的文本搜索还是在大规模数据的全文搜索中,使用文本模糊查询可以提高搜索的准确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值