lucene - 在 Elasticsearch 搜索中使用通配符和必需运算符

标签 lucene elasticsearch

我们的 Elasticsearch 索引中有多个包含文本的行

"... 2% milk ...".

用户在搜索字段中输入“2% 牛奶”等查询,我们在内部将其转换为查询

title:(+milk* +2%*)

因为所有术语都应该是必需的,并且我们可能对包含“2% 乳脂”的行感兴趣。

上面的查询返回零命中。将查询更改为

title:(+milk* +2%)

返回合理的结果。那么为什么第一个查询中的“*”运算符不起作用?

最佳答案

除非您设置映射,否则“%”符号将在标记化过程中被删除。基本上“2% 牛奶”将变成标记 2milk

当您搜索“2%*”时,它会查找以下标记:2%2%a2%b、等等...并且不匹配任何索引标记,没有命中。

当您搜索“2%”时,它将经历与索引时相同的标记化过程(您可以指定这一点,但默认标记化是相同的),并且您将查找与标记匹配的文档2,这会给你带来打击。

您可以read more about the analysis/tokenization process here您可以通过 defining a custom mapping 设置您想要的分析

祝你好运!

关于lucene - 在 Elasticsearch 搜索中使用通配符和必需运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17857088/

相关文章:

java - 如何使用 Hibernate Lucene Search 进行不区分大小写的排序?

solr - lucene 如何与 Neo4j 配合使用

sitecore - 使用 Sitecore 高级数据库爬虫将索引作为 NumericFields

elasticsearch - kibana 4.0 中比率的趋势

symfony - FOSElasticaBundle:如何不索引脱机文档?

java - 我可以在 Lucene 查询字符串中做 count (*) 吗?

elasticsearch - 如何为ElasticSearch向雪球分析器添加小写索引

lucene - 在 Elastic Search 中查找具有特殊字符的子字符串

java - 使用标准分析器清理 Lucene 搜索词

elasticsearch - 使用IBM MobileFirst Analytics配置外部Elasticsearch服务器