【发布时间】:2017-11-01 16:28:45
【问题描述】:
我在 Elasticsearch 中设置了一个简单的索引,我想对它执行 "Github like" 子序列搜索:
{
"files" : {
"aliases" : { },
"mappings" : {
"file" : {
"properties" : {
"name" : {
"type" : "text",
"analyzer" : "simple"
}
}
}
}
}
}
然后我添加一个文档:
curl -XPOST 'localhost:9200/files/file' -H 'Content-Type: application/json' -d'
{
"name": "/my/path/to/file.txt"
}
'
当我用
查询时"query": { "match": {"name": {"query": "mypath", "fuzziness": "AUTO" }} }
我按预期取回了文件。但是,如果我查询
"query": { "match": {"name": {"query": "mypathto", "fuzziness": "AUTO" }} }
文件不再返回。
基本上我希望文档的所有子序列都匹配,例如:
- mat/t => /my/path/to/file.t xt
- mx => /my/path/to/file.txt
- mypathtofiletxt => /我的/路径/到/file.txt
【问题讨论】:
-
您是否尝试使用“*”,同时使用
query_string查询“*mypath*”。你应该使用高亮功能。 -
我会在这里使用多个字段。除了您拥有的“名称”字段之外,您还可以添加更多字段。例如:带有模式过滤器的 nGram 字段以删除“/”。您可以根据您的用例配置 nGram 长度。查询所有字段(例如:“name”和“name.ngram”)。使用自己的分析器添加尽可能多的字段。阅读:elastic.co/guide/en/elasticsearch/reference/current/…
-
正如@Ivan 在他的回答中解释的那样,使用简单/标准分析器在名称字段上使用模糊不会让您走得太远,您的用例。
标签: elasticsearch search fuzzy-search