我有一个奇怪的问题,我需要一些帮助。
我有一个包含600万个文档的数据集,每个文档由近8000个单词组成。每个单词总是一个数字,单词/数字用空格分隔。
索引所有数据后(我现在只索引子集)我需要按数字列表执行查询,但我只想要全部这些数字的文档(条件是AND )。
我想出了这个:
String [] codes_vec = ARRAY_WITH_500_STRINGS_ALL_NUMBERS;
BoolQueryBuilder qBuilder = QueryBuilders.boolQuery();
for (int i =0; i < codes_vec.length; ++i)
{
qBuilder = qBuilder.must(QueryBuilders.matchQuery("code", codes_vec[i]));
}
问题是,这似乎效率很低,我怎样才能加快搜索速度?在我的情况下,是否有更好的查询ElasticSearch的方法会更快?
亲切的问候, ZéMaria
答案 0 :(得分:0)
在线程中拆分处理。我建议使用Future。
答案 1 :(得分:0)
使用过滤器可能比匹配查询更快。这是关于布尔过滤器的文档:http://www.elasticsearch.org/guide/reference/query-dsl/bool-filter/
以下是您可以创建和使用的方法:
// create the filter
// to cache the results, add .cache(true);
BoolFilterBuilder filterBuilder = FilterBuilders.boolFilter();
// did you mean to skip the first one?
for (int i = 0; i < codes_vec.length; ++i)
filterBuilder.must(FilterBuilders.termFilter("code", codes_vec[i]));
// add the filter to your search
SearchResponse response = client.prepareSearch("index1")
.setFilter(filterBuilder)
.setFrom(0).setSize(10)
.execute()
.actionGet();