2017-12-19 12 views
0

与えられた文字列のようなフィールド値を持つすべてのドキュメントを取得するためにelasticsearchをクエリします。たとえばfield LIKE "abc"については同様の演算子で一致する文字列を一致させる弾性検索

  • "ABCDEF" "ABC"
  • "ABCD"
  • "ABC1"

ので​​を持っているすべてのフィールドを返すことがあります内部の文字列。

私はこのクエリを試してみたがfield = "abc"と文書のみを返す:

{"query":{"more_like_this":{"fields":["FIELD"],"like_text":"abc","min_term_freq" : 1,"max_query_terms" : 12}}} 

正しいクエリとは何ですか?

ありがとうございます。

答えて

-1

ここで説明するようにワイルドカードクエリを実行できるはずです。

Elasticsearch like query

{ 
    "query": { 
    "wildcard": { 
     "<<FIELD NAME>>": "*<<QUERY TEXT>>*" 
    } 
    } 
} 
0

あなたはプレフィックスクエリを実行しようとしている場合は、これを使用することができます。

{ "query": { 
    "prefix" : { "field" : "abc" } 
} 

参照ElasticSearchプレフィックスクエリElasticSearch Prefix Query

0

あなたの質問は、不完全ではあるが。私はあなたにいくつかのアイデアを提供しようとします。

確かにプレフィックスクエリはありますが、はるかに効率的にエッジngramアナライザを構築することです。そうすれば、データの挿入とクエリの準備がはるかに高速になります。エッジngramは、任意の順序で表示される単語を自動補完できるため、機能を実行するための最も柔軟な方法です。これを行う必要はありませんが、「入力時に検索」する必要がある場合は、補完スキルを使用するのが最善の方法です。単語の真ん中に表示される文字列を見つける必要がある場合は、ngramアナライザーをチェックすることができます。

私のコードからエッジngramアナライザを設定する方法は次のとおりです。

 "settings": { 
      "analysis": { 
       "filter" : { 
        "edge_filter"  : { 
         "type" : "edge_ngram", 
         "min_gram": 1, 
         "max_gram": 256 
        } 
       }, 
       "analyzer": { 
        "edge_analyzer" : { 
         "type"  : "custom", 
         "tokenizer": "whitespace", 
         "filter" : ["lowercase", "edge_filter"] 
        }, 
        "lowercase_whitespace": { 
         "type": "custom", 
         "tokenizer": "whitespace", 
         "filter": [ "lowercase" ] 
        } 
       } 
      } 
     }, 
     "mappings": { 
      "my_type": { 
       "properties": { 
        "name": { 
         "type": "keyword", 
         "fields": { 
          "suggest": { 
           "type": "text", 
           "analyzer" : "edge_analyzer", 
           "search_analyzer": "lowercase_whitespace" 
          } 
         } 
        } 
       } 
      } 
     } 
関連する問題