2016-07-20 5 views
0

特定のフィールドに同義語を設定しましたが、not_analyzedにマップするフィールドに適用したいと考えています。例えばelasticsearchに同義語を適用した正確な値の検索

Iはnot_analyzedであり、同義語エントリが(文書内の混合言語を扱う)seksyen, sectionために添加されるseksyen 10を格納するフィールドfooを有します。

'foo': {'type': 'string', 'index': 'not_analyzed'} 

と仮定ユーザーの問題クエリ

{"term": {"foo": "section 10"}} 

seksyen 10section 10fooを期待しています。しかし、現在のマッピングでは、私はseksyen 10というクエリを返すことはできません。私はこれらは私がちょうど同義語の拡張は、それがクエリで指定せずに、クエリに適用したい

whatever seksyen 10 
seksyen 10, something 
whatever section 10 something 

を返すことにしたくないので、また、私はここでフィルタクエリをしています。私はどうしたらいいですか?

答えて

1

まず、termを使用すると、検索されたテキストの分析が行われないため、別の種類のクエリが必要になります。あなたは、次のようにそれを行うことができます

{ 
    "mappings": { 
    "test": { 
     "properties": { 
     "foo": { 
      "type": "string", 
      "index": "not_analyzed", 
      "search_analyzer": "synonym" 
     } 
     } 
    } 
    }, 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "synonym": { 
      "tokenizer": "whitespace", 
      "filter": [ 
      "synonym" 
      ] 
     } 
     }, 
     "filter": { 
     "synonym": { 
      "type": "synonym", 
      "synonyms": [ 
      "seksyen, section" 
      ] 
     } 
     } 
    } 
    } 
} 

だから、あなたは唯一の検索時に使用するsearch_analyzerを定義します。そして、あなたはそれ以外の場合は動作しませんtermフィルタを断念する必要があります。

{ 
    "query": { 
    "match": { 
     "foo": "section" 
    } 
    } 
} 

ES 1.xで作品を上記の溶液ES 2.xでは、search_analyzerフィールドとnot_analyzedフィールドはもう使用できません。

+0

残念ながら、私はES2.3にいます。S: – Jeffrey04

関連する問題