您必须将Java源代码从Elasticsearch@1.6迁移到ES@5.2 大多数事情都非常明显,但有一些我需要注意的事情(因为我是ES初学者)。 以下语法正确,但我不确定它是否在逻辑上是正确的。也许你可以提供一些反馈:
第一
// old version:
CountResponse countResponse;
count = countResponse.getCount();
// new version:
SearchResponse countResponse;
count = countResponse.getHits().getTotalHits();
第二
// old version
esClient.prepareDeleteByQuery(SearchComponentsConstants.INDEX_CATALOG)
.setTypes(type)
.setQuery(QueryBuilders.filteredQuery(
QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(
FilterBuilders.termFilter(CatalogDocument.CatalogIndex.CATALOGID.getIndexField(), catalogId),
FilterBuilders.termFilter(SearchComponentsConstants.FIELD_DEFAULT_ID, id))
)
)
.get();
// new version:
DeleteByQueryAction.INSTANCE.newRequestBuilder(esClient).setIndices(SearchComponentsConstants.INDEX_CATALOG)
.setTypes(type)
.setQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.matchAllQuery())
.must(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery(CatalogDocument.CatalogIndex.CATALOGID.getIndexField(), catalogId))
.must(QueryBuilders.termQuery(SearchComponentsConstants.FIELD_DEFAULT_ID, id))
)
)
.get();
1)在很多例子中,我看到.setIndices(myindex)
根本没有被使用 - 但是当我的旧代码有这个可变(SearchComponentsConstants.INDEX_CATALOG
)时,我必须在新代码中设置它,避风港不是吗?
2)新代码可能错误,因为我将.filteredQuery(a, b)
替换为.boolQuery().must(a).must(b)
,而也将.andFIlter(a, b)
替换为.boolQuery().must(a).must(b)
...所以我猜filteredQuery()
替换可能是错误的。
第三
// old version:
AbstractSearchParameter searchParameter;
SearchRequestBuilder search = client.prepareSearch(searchParameter.getIndex());
search.addFields(searchParameter.getFieldsToReturn().toArray(new String[0]));
// new version:
AbstractSearchParameter searchParameter;
SearchRequestBuilder search = client.prepareSearch(searchParameter.getIndex());
for(String field : searchParameter.getFieldsToReturn()){
search.addStoredField(field);
}
我不知道.toArray(new String[0])
代表什么,所以我不确定我的替换是否正确。