nice usage of versioning parse element

This commit is contained in:
kimchy 2011-02-08 17:50:28 +02:00
parent ac8646deb7
commit 3062d5b86c
3 changed files with 10 additions and 8 deletions

View File

@ -24,7 +24,6 @@ import org.elasticsearch.common.collect.ImmutableMap;
import org.elasticsearch.search.SearchParseElement; import org.elasticsearch.search.SearchParseElement;
import org.elasticsearch.search.fetch.FetchPhaseExecutionException; import org.elasticsearch.search.fetch.FetchPhaseExecutionException;
import org.elasticsearch.search.fetch.SearchHitPhase; import org.elasticsearch.search.fetch.SearchHitPhase;
import org.elasticsearch.search.fetch.version.VersionParseElement;
import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.internal.SearchContext;
import java.io.IOException; import java.io.IOException;
@ -36,7 +35,7 @@ import java.util.Map;
public class ExplainSearchHitPhase implements SearchHitPhase { public class ExplainSearchHitPhase implements SearchHitPhase {
@Override public Map<String, ? extends SearchParseElement> parseElements() { @Override public Map<String, ? extends SearchParseElement> parseElements() {
return ImmutableMap.of("explain", new ExplainParseElement(), "version", new VersionParseElement()); return ImmutableMap.of("explain", new ExplainParseElement());
} }
@Override public boolean executionNeeded(SearchContext context) { @Override public boolean executionNeeded(SearchContext context) {

View File

@ -36,18 +36,14 @@ import java.util.Map;
public class VersionSearchHitPhase implements SearchHitPhase { public class VersionSearchHitPhase implements SearchHitPhase {
@Override public Map<String, ? extends SearchParseElement> parseElements() { @Override public Map<String, ? extends SearchParseElement> parseElements() {
return ImmutableMap.of(); return ImmutableMap.of("version", new VersionParseElement());
} }
@Override public boolean executionNeeded(SearchContext context) { @Override public boolean executionNeeded(SearchContext context) {
return true; return context.version();
} }
@Override public void execute(SearchContext context, HitContext hitContext) throws ElasticSearchException { @Override public void execute(SearchContext context, HitContext hitContext) throws ElasticSearchException {
if (!context.version()) {
hitContext.hit().version(-1);
return;
}
// it might make sense to cache the TermDocs on a shared fetch context and just skip here) // it might make sense to cache the TermDocs on a shared fetch context and just skip here)
// it is going to mean we work on the high level multi reader and not the lower level reader as is // it is going to mean we work on the high level multi reader and not the lower level reader as is
// the case below... // the case below...

View File

@ -114,10 +114,17 @@ public class SimpleVersioningTests extends AbstractNodesTests {
assertThat(client.prepareGet("test", "type", "1").execute().actionGet().version(), equalTo(2l)); assertThat(client.prepareGet("test", "type", "1").execute().actionGet().version(), equalTo(2l));
} }
// search with versioning
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
SearchResponse searchResponse = client.prepareSearch().setQuery(matchAllQuery()).setVersion(true).execute().actionGet(); SearchResponse searchResponse = client.prepareSearch().setQuery(matchAllQuery()).setVersion(true).execute().actionGet();
assertThat(searchResponse.hits().getAt(0).version(), equalTo(2l)); assertThat(searchResponse.hits().getAt(0).version(), equalTo(2l));
} }
// search without versioning
for (int i = 0; i < 10; i++) {
SearchResponse searchResponse = client.prepareSearch().setQuery(matchAllQuery()).execute().actionGet();
assertThat(searchResponse.hits().getAt(0).version(), equalTo(-1l));
}
} }
@Test public void testSimpleVersioningWithFlush() throws Exception { @Test public void testSimpleVersioningWithFlush() throws Exception {