summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMichael Stockerl <stockerlm@gmx.de>2016-03-20 19:12:05 +0100
committerMichael Stockerl <stockerlm@gmx.de>2016-03-20 19:12:05 +0100
commitbd17ee8c56d45c4b54c4ff25d53fa298825d4623 (patch)
tree1c5593283a196a6a5b8818325f541a26f2b7c7a2 /core
parentef4293a993014379c54e2399e692c6387d80f0ca (diff)
Get TermVectorResponses for like and unlike items in separate requests, so we don't have to validate responses afterwards.
Relates to #14944
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java27
-rw-r--r--core/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java27
2 files changed, 35 insertions, 19 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
index 9f6c8b24c4..fcda9ae3a8 100644
--- a/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
@@ -861,14 +861,14 @@ public class MoreLikeThisQueryBuilder extends AbstractQueryBuilder<MoreLikeThisQ
}
// fetching the items with multi-termvectors API
- MultiTermVectorsResponse responses = fetchResponse(context.getClient(), likeItems, unlikeItems, SearchContext.current());
-
+ MultiTermVectorsResponse likeItemsResponse = fetchResponse(context.getClient(), likeItems);
// getting the Fields for liked items
- mltQuery.setLikeText(getFieldsFor(responses, likeItems));
+ mltQuery.setLikeText(getFieldsFor(likeItemsResponse));
// getting the Fields for unliked items
if (unlikeItems.length > 0) {
- org.apache.lucene.index.Fields[] unlikeFields = getFieldsFor(responses, unlikeItems);
+ MultiTermVectorsResponse unlikeItemsResponse = fetchResponse(context.getClient(), unlikeItems);
+ org.apache.lucene.index.Fields[] unlikeFields = getFieldsFor(unlikeItemsResponse);
if (unlikeFields.length > 0) {
mltQuery.setUnlikeText(unlikeFields);
}
@@ -907,30 +907,19 @@ public class MoreLikeThisQueryBuilder extends AbstractQueryBuilder<MoreLikeThisQ
}
}
- private MultiTermVectorsResponse fetchResponse(Client client, Item[] likeItems, @Nullable Item[] unlikeItems,
- SearchContext searchContext) throws IOException {
+ private MultiTermVectorsResponse fetchResponse(Client client, Item[] items) throws IOException {
MultiTermVectorsRequest request = new MultiTermVectorsRequest();
- for (Item item : likeItems) {
- request.add(item.toTermVectorsRequest());
- }
- for (Item item : unlikeItems) {
+ for (Item item : items) {
request.add(item.toTermVectorsRequest());
}
+
return client.multiTermVectors(request).actionGet();
}
- private static Fields[] getFieldsFor(MultiTermVectorsResponse responses, Item[] items) throws IOException {
+ private static Fields[] getFieldsFor(MultiTermVectorsResponse responses) throws IOException {
List<Fields> likeFields = new ArrayList<>();
- Set<Item> selectedItems = new HashSet<>();
- for (Item request : items) {
- selectedItems.add(new Item(request.index(), request.type(), request.id()));
- }
-
for (MultiTermVectorsItemResponse response : responses) {
- if (!hasResponseFromRequest(response, selectedItems)) {
- continue;
- }
if (response.isFailed()) {
continue;
}
diff --git a/core/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java b/core/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java
index 651982106c..9f06f62558 100644
--- a/core/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java
+++ b/core/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java
@@ -145,6 +145,32 @@ public class MoreLikeThisIT extends ESIntegTestCase {
assertThat(response.getHits().getAt(0).id(), equalTo("3"));
}
+ // Issue #14944
+ public void testMoreLikeThisWithAliasesInLikeDocuments() throws Exception {
+ String indexName = "foo";
+ String aliasName = "foo_name";
+ String typeName = "bar";
+
+ String mapping = XContentFactory.jsonBuilder().startObject().startObject("bar")
+ .startObject("properties")
+ .endObject()
+ .endObject().endObject().string();
+ client().admin().indices().prepareCreate(indexName).addMapping(typeName, mapping).execute().actionGet();
+ client().admin().indices().aliases(indexAliasesRequest().addAlias(aliasName, indexName)).actionGet();
+
+ assertThat(ensureGreen(), equalTo(ClusterHealthStatus.GREEN));
+
+ client().index(indexRequest(indexName).type(typeName).id("1").source(jsonBuilder().startObject().field("text", "elasticsearch index").endObject())).actionGet();
+ client().index(indexRequest(indexName).type(typeName).id("2").source(jsonBuilder().startObject().field("text", "lucene index").endObject())).actionGet();
+ client().index(indexRequest(indexName).type(typeName).id("3").source(jsonBuilder().startObject().field("text", "elasticsearch index").endObject())).actionGet();
+ refresh(indexName);
+
+ SearchResponse response = client().prepareSearch().setQuery(
+ new MoreLikeThisQueryBuilder(null, new Item[] {new Item(aliasName, typeName, "1")}).minTermFreq(1).minDocFreq(1)).get();
+ assertHitCount(response, 2L);
+ assertThat(response.getHits().getAt(0).id(), equalTo("3"));
+ }
+
public void testMoreLikeThisIssue2197() throws Exception {
Client client = client();
String mapping = XContentFactory.jsonBuilder().startObject().startObject("bar")
@@ -564,6 +590,7 @@ public class MoreLikeThisIT extends ESIntegTestCase {
.maxQueryTerms(100)
.include(true)
.minimumShouldMatch("0%");
+
response = client().prepareSearch("test").setTypes("type1").setQuery(mltQuery).get();
assertSearchResponse(response);
assertHitCount(response, numFields - (i + 1));