我正在使用弹性搜索来搜索存储在MongoDB中的文件。我想检索名称与模式匹配的所有文件。当我在MongoDB中查询时,它返回6754个文件。
FSsearch:PRIMARY> db.fs.files.find({"filename":/.*Mail.*/}).count();
6754
但是当我尝试使用弹性搜索时,它只返回85个文件。有什么方法可以在弹性搜索中获取所有文件吗?
curl -XGET "localhost:9200/submission_idx/files/_search?search_type=scan&scroll=10m&size=7000&pretty=1" -d '{"query" : {
"field" : {
"filename" : "*Mail*"
}
}
}'
{
"_scroll_id" : "c2Nhbjs1OzIyMDpDV21tamdEbVEyZUhOcVcwYWVnVU9ROzIxODpDV21tamdEbVEyZUhOcVcwYWVnVU9ROzIxNjpDV21tamdEbVEyZUhOcVcwYWVnVU9ROzIxOTpDV21tamdEbVEyZUhOcVcwYWVnVU9ROzIxNzpDV21tamdEbVEyZUhOcVcwYWVnVU9ROzE7dG90YWxfaGl0czo4NTs=",
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 85,
"max_score" : 0.0,
"hits" : [ ]
}
}
答案 0 :(得分:0)
您可以使用Regexp Filter(或Regexp Query):
{
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"regexp":{
"filename" : "*mail*"
}
}
}
}
注意邮件上的小写“m”。默认情况下,Elasticsearch使用小写标记生成器分析所有字段。因此,当搜索大写的“邮件”时,Elasticsearch将从返回的结果中排除所有分析的字段。您可以通过将字段标记为“not_analyzed”或创建自己的自定义分析器来关闭默认的小写标记器。
另外,请注意,在搜索大型数据集时,使用通配符(尤其是在查询开头时)可能会非常慢且占用大量内存。