0

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

我有一个包含 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 的方法在我的情况下会更快?

亲切的问候,泽玛丽亚

4

2 回答 2

0

在线程中拆分处理。我建议使用Future

于 2013-09-24T18:41:35.790 回答
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();
于 2013-09-25T00:56:16.523 回答