Skip to content

Commit

Permalink
Allow 'omit_norms' on the '_all' field
Browse files Browse the repository at this point in the history
The '_all' field doesn't allow to omit norms. In certain scenarios
omitting the norm values makes a lot of sense to get senseable scoring.

Closes elastic#3734
  • Loading branch information
s1monw committed Dec 30, 2013
1 parent e7a84d7 commit 48627f3
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
Expand Up @@ -261,7 +261,8 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws

if (!includeDefaults && enabled == Defaults.ENABLED && fieldType.stored() == Defaults.FIELD_TYPE.stored() &&
fieldType.storeTermVectors() == Defaults.FIELD_TYPE.storeTermVectors() &&
indexAnalyzer == null && searchAnalyzer == null && customFieldDataSettings == null) {
indexAnalyzer == null && searchAnalyzer == null && customFieldDataSettings == null
&& fieldType.omitNorms() == Defaults.FIELD_TYPE.omitNorms()) {
return builder;
}
builder.startObject(CONTENT_TYPE);
Expand All @@ -286,6 +287,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
if (includeDefaults || fieldType.storeTermVectorPayloads() != Defaults.FIELD_TYPE.storeTermVectorPayloads()) {
builder.field("store_term_vector_payloads", fieldType.storeTermVectorPayloads());
}
if (includeDefaults || fieldType.omitNorms() != Defaults.FIELD_TYPE.omitNorms()) {
builder.field("omit_norms", fieldType.omitNorms());
}


if (indexAnalyzer == null && searchAnalyzer == null) {
Expand Down
Expand Up @@ -56,6 +56,7 @@ public void testSimpleAllMappers() throws Exception {
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
FieldMapper mapper = docMapper.mappers().smartNameFieldMapper("_all");
assertThat(field.fieldType().omitNorms(), equalTo(true));
assertThat(mapper.queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class));
}

Expand All @@ -72,6 +73,7 @@ public void testAllMappersNoBoost() throws Exception {
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
FieldMapper mapper = docMapper.mappers().smartNameFieldMapper("_all");
assertThat(field.fieldType().omitNorms(), equalTo(false));
assertThat(mapper.queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(TermQuery.class));
}

Expand All @@ -88,6 +90,7 @@ public void testAllMappersTermQuery() throws Exception {
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
FieldMapper mapper = docMapper.mappers().smartNameFieldMapper("_all");
assertThat(field.fieldType().omitNorms(), equalTo(false));
assertThat(mapper.queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(TermQuery.class));

}
Expand All @@ -109,6 +112,7 @@ public void testSimpleAllMappersWithReparse() throws Exception {
assertThat(allEntries.fields().contains("address.last.location"), equalTo(true));
assertThat(allEntries.fields().contains("name.last"), equalTo(true));
assertThat(allEntries.fields().contains("simple1"), equalTo(true));
assertThat(field.fieldType().omitNorms(), equalTo(false));
}

@Test
Expand All @@ -125,6 +129,7 @@ public void testSimpleAllMappersWithStore() throws Exception {

String text = field.stringValue();
assertThat(text, equalTo(allEntries.buildText()));
assertThat(field.fieldType().omitNorms(), equalTo(false));
}

@Test
Expand All @@ -145,5 +150,6 @@ public void testSimpleAllMappersWithReparseWithStore() throws Exception {

String text = field.stringValue();
assertThat(text, equalTo(allEntries.buildText()));
assertThat(field.fieldType().omitNorms(), equalTo(false));
}
}
@@ -1,7 +1,8 @@
{
"person":{
"_all":{
"enabled":true
"enabled":true,
"omit_norms":true
},
"properties":{
"name":{
Expand Down
31 changes: 31 additions & 0 deletions src/test/java/org/elasticsearch/search/query/SimpleQueryTests.java
Expand Up @@ -58,6 +58,37 @@

public class SimpleQueryTests extends ElasticsearchIntegrationTest {

@Test
public void testOmitNormsOnAll() throws ExecutionException, InterruptedException, IOException {
assertAcked(client().admin().indices().prepareCreate("test")
.addMapping("type1", jsonBuilder().startObject().startObject("type1")
.startObject("_all").field("omit_norms", true).endObject()
.endObject().endObject()));
indexRandom(true, client().prepareIndex("test", "type1", "1").setSource("field1", "the quick brown fox jumps"),
client().prepareIndex("test", "type1", "2").setSource("field1", "quick brown"),
client().prepareIndex("test", "type1", "3").setSource("field1", "quick"));

assertHitCount(client().prepareSearch().setQuery(matchQuery("_all", "quick")).get(), 3l);
SearchResponse searchResponse = client().prepareSearch().setQuery(matchQuery("_all", "quick")).get();
SearchHit[] hits = searchResponse.getHits().hits();
assertThat(hits.length, equalTo(3));
assertThat(hits[0].score(), allOf(equalTo(hits[1].getScore()), equalTo(hits[2].getScore())));
wipeIndices("test");

assertAcked(client().admin().indices().prepareCreate("test"));
indexRandom(true, client().prepareIndex("test", "type1", "1").setSource("field1", "the quick brown fox jumps"),
client().prepareIndex("test", "type1", "2").setSource("field1", "quick brown"),
client().prepareIndex("test", "type1", "3").setSource("field1", "quick"));

assertHitCount(client().prepareSearch().setQuery(matchQuery("_all", "quick")).get(), 3l);
searchResponse = client().prepareSearch().setQuery(matchQuery("_all", "quick")).get();
hits = searchResponse.getHits().hits();
assertThat(hits.length, equalTo(3));
assertThat(hits[0].score(), allOf(greaterThan(hits[1].getScore()), greaterThan(hits[2].getScore())));

}


@Test // see https://github.com/elasticsearch/elasticsearch/issues/3177
public void testIssue3177() {
assertAcked(prepareCreate("test").setSettings(settingsBuilder().put(SETTING_NUMBER_OF_SHARDS, 1)));
Expand Down

0 comments on commit 48627f3

Please sign in to comment.