クエリのanalyzer: "keyword" は正しいですか?
2016年は、 "2016" と "年” の2つのトークンに分かれて格納されます。
なので、検索時にも検索クエリが ”2016年"という1tokenではなく、"2016"と"年"とならなければヒットしないと思います。
検索対象のフィールドに設定したanalyzerと異なるanalyzerを検索時に指定していないかどうかが気になりました。
私の環境で試した内容は次の通りですが、検索することができました。
Mapping Configuration
analyzer name = "kuromoji"
PUT forum1
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
},
"analysis": {
"tokenizer": {
"kuromoji": {
"type": "kuromoji_tokenizer",
"mode": "search"
}
},
"analyzer": {
"kuromoji": {
"type": "custom",
"tokenizer": "kuromoji",
"filter": [
"kuromoji_baseform",
"kuromoji_part_of_speech"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"title": {
"type": "text",
"analyzer": "kuromoji",
"fielddata": true
},
"description": {
"type": "text",
"analyzer": "kuromoji"
}
}
}
}
}
Indexing
POST forum1/test/1
{
"title": "あいうえお",
"description": "...スポーツ。2016年リオオリンピックが終了しました。..."
}
Search
using analyzer = kuromoji
GET forum1/_search
{
"query": {
"simple_query_string" : {
"fields": [
"title^10",
"title.*^4",
"description^2",
"description.*^2"
],
"query": "2016年",
"analyzer": "kuromoji",
"default_operator": "AND"
}
}
}
and result is below.
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.1395401,
"hits": [
{
"_index": "forum1",
"_type": "test",
"_id": "1",
"_score": 1.1395401,
"_source": {
"title": "あいうえお",
"description": "...スポーツ。2016年リオオリンピックが終了しました。..."
}
}
]
}
}
if using analyzer = "keyword", no hits.
best regards.