2016-12-19 9 views
0

私はこのために弾性検索クエリになりますこれは何のSQLコンバートSQL

Select * from a where a.col1 like %search_str% OR a.col2 like %search_str% OR a.col3 like %search_str%; 

がありますか?

var query = { 
     "query" => { 
      "multi_match" => { 
        "query" => "#{search_str}", 
        "fields" =>["col1","col2","col3"] 
      } 
     } 
    } 

非常に正確な結果を得ていない:

はこれを使用します。

+0

http://stackoverflow.com/questions/41093662/wilcard-search-or- 41094077#41094077 –

答えて

0

は、あなたが同じかのような操作に研究を制限する場合は、テキストを分析する必要はありませんコード

{ 
"bool": { 
    "should": [ 
     { 
      "multi_match" : { 
      "query":  "#{search_str}", 
      "type":  "cross_fields", 
      "fields":  [ "col1", "col2", "col3" ], 
      "fuzziness": 2, 
      "minimum_should_match": "50%" 
      } 
     } 
    ] 
    } 
} 
+0

"hello world"という値をインデックスし、検索語が "llo"の場合、どのように動作すると思われますか –

+0

"fuzzy_query"(編集距離2)を追加する必要があります。上記のboolクエリで、 'llo'もキャッチしたい場合 – Zouzias

+0

私は自分の答えを更新しました。してみてください。 –

0

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

分析を避けるためにマッピングをキーワードに変更し、ワイルドカードまたは正規表現を使用して、単一のテキスト全体を検索します。

詳細はhereを参照してください。

ここ
PUT _template/test 
{ 
    "template": "test-*", 
    "settings": { 
    "analysis": { 
     "normalizer": { 
     "my_normalizer": { 
      "type": "custom", 
      "char_filter": [], 
      "filter": ["lowercase", "asciifolding"] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "_default_": { 
     "_all": { 
     "enabled": false 
     }, 
     "dynamic_templates": [ 
     { 
      "strings_as_keywords": { 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "keyword", 
       "normalizer": "my_normalizer" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

その名前テスト -で始まるすべての新しい索引のためのテンプレートを作成する例:文字制限なし

  • ノーマライズデータを

    • マップの単純なキーワードとしてすべての文字列を大文字小文字を区別しない入力の場合、アクセントの影響を受けない研究
    • _allフィールドを削除する

    そして、おそらくあなたは正確にあなたの項目を一致させるために、フィルタにクエリを変換すると、スコアシステムを使用していない

    GET /test-1/movies/_search 
    { 
        "query": { 
        "bool": { 
         "filter": { 
         "bool": { 
          "should": [ 
          { 
           "wildcard": { 
           "title": "*tar war*" 
           } 
          }, 
          { 
           "wildcard": { 
           "title": "*ord of the ring*" 
           } 
          } 
          ] 
         } 
         } 
        } 
        } 
    }