I index the following document on ElasticSearch 5.5.0:
{
"_index": "fts-english",
"_type": "Document",
"_id": "black1",
"_version": 1,
"_score": 1,
"_source": {
"streamId": 1,
"WordB": "Cat",
"WordC": "Dog",
"WordA": "Black",
"language": "english",
"message": "Black Cat",
"doc_id": "black1"
}
}
The mapping is:
"mappings": {
"Document": {
"dynamic_templates": [{
"not_analyzed_fields": {
"match_pattern": "regex",
"mapping": {
"include_in_all": false,
"index": false,
"type": "text"
},
"match": "(language|doc_id)"
}
}
],
"_all": {
"search_analyzer": "default_search",
"analyzer": "default"
},
"properties": {
"streamId": {
"type": "long"
},
"WordB": {
"search_analyzer": "default_search",
"analyzer": "default",
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"WordC": {
"search_analyzer": "default_search",
"analyzer": "default",
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"WordA": {
"search_analyzer": "default_search",
"analyzer": "default",
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"language": {
"search_analyzer": "default_search",
"include_in_all": false,
"analyzer": "default",
"index": false,
"type": "text"
},
"message": {
"search_analyzer": "default_search",
"analyzer": "default",
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"doc_id": {
"search_analyzer": "default_search",
"include_in_all": false,
"analyzer": "default",
"index": false,
"type": "text"
}
}
},
"system": {
"_all": {
"search_analyzer": "default_search",
"analyzer": "default"
},
"properties": {
"system_message": {
"search_analyzer": "default_search",
"analyzer": "default",
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"ftsIndexVersion": {
"type": "long"
}
}
}
}
Then I run an exact phrase query for "black cat"
{
"size": 50,
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "Black Cat",
"fields": [
"mess*^1.0"
],
"type": "phrase",
"operator": "OR",
"analyzer": "default_phrase_analyzer",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"lenient": false,
"zero_terms_query": "NONE",
"boost": 1.0
}
}
],
"disable_coord": false,
"adjust_pure_negative": true,
"boost": 1.0
}
},
"post_filter": {
"bool": {
"filter": [{
"term": {
"_type": {
"value": "Document",
"boost": 1.0
}
}
}
],
"disable_coord": false,
"adjust_pure_negative": true,
"boost": 1.0
}
},
"highlight": {
"pre_tags": [
"<b>"
],
"post_tags": [
"</b>"
],
"fragment_size": 0,
"number_of_fragments": 0,
"require_field_match": true,
"fields": {
"Twee*": {},
"user*": {},
"mess*": {},
"Word*": {}
}
}
}
and I get the following error:
[2017-07-30T08:37:45,600][DEBUG][o.e.a.s.TransportSearchAction] [RvqdrEn] [59179] Failed to execute query phase
org.elasticsearch.transport.RemoteTransportException: [RvqdrEn][127.0.0.1:9300][indices:data/read/search[phase/query/id]]
Caused by: org.elasticsearch.search.query.QueryPhaseExecutionException: Query Failed [Failed to execute main query]
at org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:414) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:108) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:349) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.action.search.SearchTransportService$7.messageReceived(SearchTransportService.java:340) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.action.search.SearchTransportService$7.messageReceived(SearchTransportService.java:337) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) ~[elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:644) [elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:638) [elasticsearch-5.5.0.jar:5.5.0]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-5.5.0.jar:5.5.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: java.lang.IllegalStateException: field "message.keyword" was indexed without position data; cannot run PhraseQuery (phrase=message.keyword:"black cat")
at org.apache.lucene.search.PhraseQuery$PhraseWeight.scorer(PhraseQuery.java:411) ~[lucene-core-6.6.0.jar:6.6.0 5c7a7b65d2aa7ce5ec96458315c661a18b320241 - ishan - 2017-05-30 07:29:46]
at org.apache.lucene.search.DisjunctionMaxQuery$DisjunctionMaxWeight.scorer(DisjunctionMaxQuery.java:145) ~[lucene-core-6.6.0.jar:6.6.0 5c7a7b65d2aa7ce5ec96458315c661a18b320241 - ishan - 2017-05-30 07:29:46]
This works perfectly on Elastic Search 2.2.0, where the mapping is based on "string" field type rather than "text".
Trying to search for a solution on the web got nowhere.