如何解决在 Elasticsearch/Lucene 中执行模糊查询时,是否最大创建了 n^2 个字符串扩展?
我通过 docker-compose 文件(可以在下面找到)将 Elasticsearch 与 Kibana 一起使用。 我正在使用他们的示例 data。
我正在对文本字段 email
执行模糊查询,目的是匹配以下字符串:eddie@underwood-family.zzz
:
GET /_search
{
"query": {
"fuzzy": {
"email": {
"value": "eddie@underwood-family.xzzzy"
}
}
}
}
并且我对 email
确实是 eddie@underwood-family.zzz
的文档进行了 1 次命中。根据 docs,搜索查询扩展为默认数量 50 max_expansions
。据我所知,最多 50 个字符串是根据我的输入字符串 eddie@underwood-family.xzzzy
创建的。
但是,据我所知,对于长度为 n
的字符串,根据 dynamic programming algorithm 可以有最大 n^2
扩展(对于我的 28 个字符的输入字符串,将在最多 784 个扩展)。所以我不明白为什么我的搜索查询会产生命中,因为 784 比 50 大得多。那么 50 次扩展中的一个碰巧产生了结果或结果是幸运的,还是我误解了模糊查询的工作原理?>
我还应该提到 Lucene uses Levenshtein Automaton 来执行模糊搜索,但是为什么需要创建扩展呢?应该只向自动机提供搜索字符串,该自动机应该返回匹配或不返回。
Docker 撰写文件:
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- cluster.initial_master_nodes=es01
- bootstrap.memory_lock=true
- 'ES_JAVA_OPTS=-Xms512m -Xmx512m'
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.13.2
container_name: kib01
depends_on:
- es01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: '["http://es01:9200"]'
networks:
- elastic
volumes:
data01:
driver: local
networks:
elastic:
driver: bridge
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。