2016-11-10 15 views
0

ファジーで文字列に含まれるクエリを実行するにはどうすればよいですか? のは、私は次のドキュメントがあるとしましょう:ファジーにはelasticSearchによるクエリが含まれています

{ ... "name":"william shakespeare" ... }

私は次のクエリのための文書を受け取りたい:

  1. 「ウィリアム」(すべてのウィリアムズを返します)を
  2. 」ウィリアムシェイク "(ウィリアムシェイク"
  3. "を含むドキュメントのみを返します。Wiliam sa KE」(3と同じ)
  4. 『ウィリアム・シェイクスピア』/『ウィリアム・シェイクスピア』/『ウィリアムshakespeer』(唯一のウィリアム・シェイクスピア

ノー成功を収めてNGRAMアナライザとあいまいクエリを使用しようとしたに戻ります。

{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "ngram_analyzer_filter": { 
      "type": "ngram", 
      "min_gram": 2, 
      "max_gram": 15 
     } 
     }, 
     "analyzer": { 
     "ngram_analyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "ngram_analyzer_filter" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "analyzer": "ngram_analyzer", 
      "search_analyzer": "standard", 
      "fields": { 
      "raw": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

私のクエリ:私は複数のフィールドを検索するため

{ 
    "query": { 
    "multi_match": { 
     "query": "william shake", 
     "fields": [ 
     "name.raw" 
     ], 
     "fuzziness": 2, 
     "minimum_should_match":2 
    } 
    } 
} 
  • それはmulti_match。
  • 分析フィールドまたはnot_analyzedフィールドを使用しようとしました。
  • "タイプ" を使用しようとしました: "というフレーズ"
  • 弾性バージョン2.3.1

答えて

0

クエリの下に試してみてください。

{ 
    'query': { 
    'multi_match': { 
     'fields': [ 
      "name.raw" 
     ], 
     'query': $scope.search.queryTerm, 
     'fuzziness': 2, 
     'prefix_length': 1 
    } 
    } 
} 
関連する問題