By using
multi fields, you can add more than one analyzer to a field. But it is totally
a different approach.
PUT /blog/_mappings/posts { "properties":{ "title":{ "type" : "string", "analyzer" : "english", "fields":{ "english" : { "type":"string", "analyzer" : "english" }, "raw" : { "type" : "string", "index" : "not_analyzed" } } } } }
The main
"title" field uses english analyzer, "title.english" field
uses english analyzer, "title.raw" field uses no analyzer.
GET /blog/_analyze?field=title { "Age is an issue of mind over matter. If you don't mind, it doesn't matter." }
For above
query, you will get following response.
{ "tokens": [ { "token": "ag", "start_offset": 5, "end_offset": 8, "type": "<ALPHANUM>", "position": 1 }, { "token": "issu", "start_offset": 15, "end_offset": 20, "type": "<ALPHANUM>", "position": 4 }, { "token": "mind", "start_offset": 24, "end_offset": 28, "type": "<ALPHANUM>", "position": 6 }, { "token": "over", "start_offset": 29, "end_offset": 33, "type": "<ALPHANUM>", "position": 7 }, { "token": "matter", "start_offset": 34, "end_offset": 40, "type": "<ALPHANUM>", "position": 8 }, { "token": "you", "start_offset": 45, "end_offset": 48, "type": "<ALPHANUM>", "position": 10 }, { "token": "don't", "start_offset": 49, "end_offset": 54, "type": "<ALPHANUM>", "position": 11 }, { "token": "mind", "start_offset": 55, "end_offset": 59, "type": "<ALPHANUM>", "position": 12 }, { "token": "doesn't", "start_offset": 64, "end_offset": 71, "type": "<ALPHANUM>", "position": 14 }, { "token": "matter", "start_offset": 72, "end_offset": 78, "type": "<ALPHANUM>", "position": 15 } ] }
GET /blog/_analyze?field=title.raw { "Age is an issue of mind over matter. If you don't mind, it doesn't matter." }
For above
query, you will get following response.
{ "tokens": [ { "token": "{\n \"Age is an issue of mind over matter. If you don't mind, it doesn't matter.\"\n}\n", "start_offset": 0, "end_offset": 83, "type": "word", "position": 1 } ] }
Post some
data to type “blog”.
POST /blog/posts/1 { "title" : "Age is an issue of mind over matter. If you don't mind, it doesn't matter." }
GET /blog/posts/_search { "query":{ "match":{ "title.raw" : "age" } } }
For above
query, you will get following response.
{ "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 0, "max_score": null, "hits": [] } }
As you
observer the response, it contains no documents, it is because, title.raw is
not analyzed field, if you run same query against, title field you will get
document1 in response.
GET /blog/posts/_search { "query":{ "match":{ "title" : "age" } } }
For above
query, you will get following response.
{ "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 0.095891505, "hits": [ { "_index": "blog", "_type": "posts", "_id": "1", "_score": 0.095891505, "_source": { "title": "Age is an issue of mind over matter. If you don't mind, it doesn't matter." } } ] } }
GET /blog/posts/_search { "query":{ "match":{ "title" : "Age is an issue of mind over matter. If you don't mind, it doesn't matter." } } }
For above
query, you will get following response.
{ "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 0.35347727, "hits": [ { "_index": "blog", "_type": "posts", "_id": "1", "_score": 0.35347727, "_source": { "title": "Age is an issue of mind over matter. If you don't mind, it doesn't matter." } } ] } }
No comments:
Post a Comment