如何搜索数百万个文件,平均每个8000字?

时间:2013-09-24 18:27:12

标签: java search lucene full-text-search elasticsearch

我有一个奇怪的问题,我需要一些帮助。

我有一个包含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

2 个答案:

答案 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();