ESのクエリ操作

1、プレフィックス問い合わせ

データを入力します。

PUT / my_index /アドレス/ 1 
{ " 郵便番号"" W1 3DG " } 

PUT / my_index /アドレス/ 2 
{ " 郵便番号"" W2F 8HW " } 

PUT / my_index /アドレス/ 3 
{ " 郵便番号を"" W1 7HW " } 

PUT / my_index /アドレス/ 4 
{ " 郵便番号"" WC1N 1LZ "} 

PUT / my_index /アドレス/5 
{ " 郵便番号"" SW5 0BE " }   

すべて見つけるには  W1 ジップ始まりを、あなたは簡単に使用できる  prefix クエリを:

类似于SQL:*テーブルからどこのX-X 'のXX%' のように選択します。

GET / my_index /アドレス/ _search 
{ 
    " クエリ" :{
         " 接頭辞" :{
             " 郵便番号"" W1 " 
        } 
    } 
}

 

2、クエリに一致するフレーズ(match_phrase)

     クエリに一致するフレーズ、ElasticSearchエンジン最初の解析を実行する場合は、すべての単語のフレーズに合わせて、各単語の相対位置が同じであることを確認しなければならないことを意味する、解析後のテキストからのクエリ句を構築し、クエリ文字列を(分析):

POST / _search - D 
{   
   " から"1 " サイズ"100 " フィールド"" eventNameの" ]、
    " クエリ" :{  
       " match_phrase " :{  
          " eventNameの"" オープンソース" 
      } 
   } 
}

3、クエリに一致するフレーズプレフィックス(match_phrase_prefix)

    最後のワードプレフィックスマッチングクエリテキストのみ、match_phrase_prefixに加えて、本質的に同じクエリをmatch_phrase、max_expansionsが最後のワードは、プレフィックスの数再書き込まれる制御パラメータ、すなわち単語の数プレフィックス拡張コンポーネントを制御するためには、デフォルトは50。より拡張されたプレフィックス番号、見つかったドキュメントのより多く;拡張子のプレフィックス番号はデータが不足して、適切な文書を見つけられない可能性がある場合少なすぎます。コードに示すように、文書は「オープンソースハックナイト」が含まEVENTNAME見つけることができます。

POST / _search - D 
{   
   " から"1 " サイズ"100 " フィールド"" eventNameの" ]、
    " クエリ" :{  
       " match_phrase_prefix " :{  
          " eventNameの" :{  
             " クエリ"" オープンソースHAC " " max_expansions 50
         } 
      } 
   } 
}

、非常に高くなる傾向があり、一致のパフォーマンスを使用しW1->転置インデックスをスキャンする - >スキャンがW1になると、それはW1を持つ2つのドキュメントであるので、それは、停止することができます発見されていない - 別の用語を検索するために継続する>必要A;

 4、ワイルドカードや正規表現のクエリ

prefix 同様の特性プレフィックスクエリ  wildcard ワイルドカードクエリベースも下層検索用語、接頭辞は、それが別のクエリは、指定した正規表現にマッチすることができることです。これは、標準のシェルのワイルドカードクエリを使用しています:  ? 任意の文字に一致する  * 0個以上の文字に一致します。

  このクエリは、試合が含ま  W1F 7HW や  W2F 8HW 文書を:

/ my_index /アドレス/ GET _search 
{ 
   " クエリは" :{
        " ワイルドカード" :{
            " 郵便番号"" ?W F * HW "  
       } 
   } 
}

 

? マッチ  1 と  2 、  * スペースやで  7 と  8 一致します。

私たちが一致する場合を想像し  W 、すべての郵便番号を、接頭辞マッチング領域が含まれる  WC すべての郵便番号をあなただけ一致させたい場合は、ワイルドカードの試合の最初に直面する問題は、に似て  W 始まりを、すべての数字のための郵便番号に従って、  regexp 正規表現は、書き込みクエリを許可しますそのようなより複雑なパターン:

 

/ my_index /アドレス/ GET _search 
{ 
   " クエリは" :{
        " 正規表現" :{
            " 郵便番号""W [0-9] + "  
       } 
   } 
}

 

 

 QueryBuilders.regexpQuery( "郵便番号"、 "W [0-9] +。");

    この正規表現はしなければならない言葉を必要とし  W 、で始まる0-9から任意の数字が続く、その後、他の文字の一つ以上を取ります。

     ワイルドカードと正規表現、プレフィックス原則と一致し、インデックス全体をスキャンします、パフォーマンスの低下、インデックス内のデータを前処理プレフィックスマッチの効率を向上させることができます、そしてこれらがワイルドカードと正規表現のクエリは、クエリ時にのみ行うことができますクエリは、自分のシナリオを持っているが、それでも慎重で。

おすすめ

転載: www.cnblogs.com/JimShi/p/11520621.html