Avoid NPE in `more_like_this` when field has zero tokens (#30365)
Fixes and edge case when using `more_like_this` where TermVectorsWriter could throw an NPE when a field produced zero tokens after analysis. This changes the implementation to use an empty list of tokens in this case. Closes #30148
This commit is contained in:
parent
5d5acd5dc8
commit
a28424ee5d
|
@ -104,6 +104,8 @@ ones that the user is authorized to access in case field level security is enabl
|
||||||
[float]
|
[float]
|
||||||
=== Bug Fixes
|
=== Bug Fixes
|
||||||
|
|
||||||
|
Fix NPE in 'more_like_this' when field has zero tokens ({pull}30365[#30365])
|
||||||
|
|
||||||
Fixed prerelease version of elasticsearch in the `deb` package to sort before GA versions
|
Fixed prerelease version of elasticsearch in the `deb` package to sort before GA versions
|
||||||
({pull}29000[#29000])
|
({pull}29000[#29000])
|
||||||
|
|
||||||
|
@ -169,6 +171,8 @@ Added put index template API to the high level rest client ({pull}30400[#30400])
|
||||||
[float]
|
[float]
|
||||||
=== Bug Fixes
|
=== Bug Fixes
|
||||||
|
|
||||||
|
Fix NPE in 'more_like_this' when field has zero tokens ({pull}30365[#30365])
|
||||||
|
|
||||||
Do not ignore request analysis/similarity settings on index resize operations when the source index already contains such settings ({pull}30216[#30216])
|
Do not ignore request analysis/similarity settings on index resize operations when the source index already contains such settings ({pull}30216[#30216])
|
||||||
|
|
||||||
Fix NPE when CumulativeSum agg encounters null value/empty bucket ({pull}29641[#29641])
|
Fix NPE when CumulativeSum agg encounters null value/empty bucket ({pull}29641[#29641])
|
||||||
|
|
|
@ -70,6 +70,10 @@ final class TermVectorsWriter {
|
||||||
Terms topLevelTerms = topLevelFields.terms(field);
|
Terms topLevelTerms = topLevelFields.terms(field);
|
||||||
|
|
||||||
// if no terms found, take the retrieved term vector fields for stats
|
// if no terms found, take the retrieved term vector fields for stats
|
||||||
|
if (fieldTermVector == null) {
|
||||||
|
fieldTermVector = EMPTY_TERMS;
|
||||||
|
}
|
||||||
|
|
||||||
if (topLevelTerms == null) {
|
if (topLevelTerms == null) {
|
||||||
topLevelTerms = EMPTY_TERMS;
|
topLevelTerms = EMPTY_TERMS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,36 @@ public class MoreLikeThisIT extends ESIntegTestCase {
|
||||||
assertHitCount(response, 1L);
|
assertHitCount(response, 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Issue #30148
|
||||||
|
public void testMoreLikeThisForZeroTokensInOneOfTheAnalyzedFields() throws Exception {
|
||||||
|
CreateIndexRequestBuilder createIndexRequestBuilder = prepareCreate("test")
|
||||||
|
.addMapping("type", jsonBuilder()
|
||||||
|
.startObject().startObject("type")
|
||||||
|
.startObject("properties")
|
||||||
|
.startObject("myField").field("type", "text").endObject()
|
||||||
|
.startObject("empty").field("type", "text").endObject()
|
||||||
|
.endObject()
|
||||||
|
.endObject().endObject());
|
||||||
|
|
||||||
|
assertAcked(createIndexRequestBuilder);
|
||||||
|
|
||||||
|
ensureGreen();
|
||||||
|
|
||||||
|
client().index(indexRequest("test").type("type").id("1").source(jsonBuilder().startObject()
|
||||||
|
.field("myField", "and_foo").field("empty", "").endObject())).actionGet();
|
||||||
|
client().index(indexRequest("test").type("type").id("2").source(jsonBuilder().startObject()
|
||||||
|
.field("myField", "and_foo").field("empty", "").endObject())).actionGet();
|
||||||
|
|
||||||
|
client().admin().indices().refresh(refreshRequest()).actionGet();
|
||||||
|
|
||||||
|
SearchResponse searchResponse = client().prepareSearch().setQuery(
|
||||||
|
moreLikeThisQuery(new String[]{"myField", "empty"}, null, new Item[]{new Item("test", "type", "1")})
|
||||||
|
.minTermFreq(1).minDocFreq(1)
|
||||||
|
).get();
|
||||||
|
|
||||||
|
assertHitCount(searchResponse, 1L);
|
||||||
|
}
|
||||||
|
|
||||||
public void testSimpleMoreLikeOnLongField() throws Exception {
|
public void testSimpleMoreLikeOnLongField() throws Exception {
|
||||||
logger.info("Creating index test");
|
logger.info("Creating index test");
|
||||||
assertAcked(prepareCreate("test")
|
assertAcked(prepareCreate("test")
|
||||||
|
|
Loading…
Reference in New Issue