2017-08-11 16 views
2

私はElasticSearchに基づいてウェブサイト上で検索を作成しています。私はElasticSearchを非常に新しくしています。Elastic Searchでの検索クエリ

これは私のElasticSearchコンテンツの構造である:私はそれがのみと一致することをスクリプトを作成する方法をお聞きしたいと思います

my $e = Search::Elasticsearch->new(); 

my $results = $e->search(
    index => 'mysite', 
    type => 'products', 
    size => 3, 
     body => { 
       query => { 
         match => { name => $query } 
       } 
     } 
); 

hits: 
    0: 
     _index: "mysite" 
     _type: "products" 
     _id: "1" 
     _score: 1 
     _source:  
      name: 
       0: "This is name" 
      number: "N6" 
      status: "Y" 

そして、これが私のPerlスクリプトですステータスが「Y」であり、サブストリング、たとえば$queryが含まれているはずです。 "is"という名前の商品に "is"という名前が含まれていて、その最後の商品がの番号でも検索する必要があります。たとえば、$queryに "N6"が含まれている場合は、その製品も。

したがって、このような何か:(名前または番号)とステータス= "Y"

はどうもありがとうございました。

更新

私はPerlの構文にそれを書き換え、私は構文エラーがあります:/

query => { 
     query_string => { 
      query => { 
      (name => $word OR number => $word) AND status => "Y" 
      } 
     } 
    } 

エラー:

-evalfile error: syntax error at (eval 215) line 33, near "} OR "\nGlobal symbol "$e" requires explicit package name at (eval 215) line 40. 
+0

PerlまたはElasticsearchで構文エラーが発生していますか?また、エラーを投稿してください。 –

+0

それはPerlエラーであると思われます。私は構文が正しいと思う。 – tomsk

答えて

1

Query String Queryを使用して、この文字列で検索してください。ドキュメントには他にもいくつかのオプションがあります。いくつかのキーワードを検索する能力は、設定したフィールドマッピングにも依存します。

{ 
    "query": { 
     "query_string" : { 
      "query" : "name:is AND (state:Y OR number:N6)" 
     } 
    } 
} 

あなたは文字列として全体query_stringクエリを処理する必要があります。だから、クエリは次のようになります。

my $e = Search::Elasticsearch->new(); 

my $results = $e->search(
    index => 'mysite', 
    type => 'products', 
    size => 3, 
    body => { 
     query => "(name:$word OR number:$word) AND status:Y" 
    } 
); 
+0

質問が更新されました – tomsk

+0

動作しません – tomsk

0

filtersはあなたが何をしたいです:これは、あなたがnumberstatusなど未解析の文字列またはキーワードの種類を(versionに依存して)行ったと仮定し

PUT myindex/_search 
{ 
    "query": { 
    "bool": { 
     "filter": [{ 
     "should": [{ 
      "match": {"name": "is" }, 
      "term": {"number": "N6"} 
     }], 
     "must": { 
      "term": {"status": "Y"} 
     }   
     ]} 
    } 
    } 
} 

- それらのフィールド内に離散的な数の値がある場合は、これを行う必要があります。それ以外の場合は、matchの場合はtermを交換してください。

+0

query_stringとフィルタの違いは何ですか?より速いのは何ですか? – tomsk

+0

エラー:boolクエリは[フィルタ]をサポートしていません – tomsk

関連する問題