- と*

2016-03-21 2 views
0
を使用したElasticsearchのクエリ文字列クエリ

ElasticsearchにQuery String Queryの問題があります。私はここにそれを複製するセンスコードを書いています。- と*

POST myindex 
POST myindex/mytype 
    { 
     "name":"t-shirt", 
     "season": "2016-3" 
    } 

そして、私は、検索:

POST myindex/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "2016-*", 
      "fields": ["name", "season"] 
     } 
    } 
} 

または:

POST myindex/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "t-shirt*" 
     } 
    } 
} 

をこれらのクエリには何の書類を返さない(それは、インデックス付き文書を返す必要があります)と私は修正する方法がわかりませんそれ。

これは例ですから、私は可能な限り一般的になりたいですが、私のドキュメントには多くのフィールドがあり、ユーザーは構文上の制限なしに自分が望むものを検索できます。

答えて

0

私は"analyze_wildcard": trueを使用しました(デフォルトはfalse)。同じクエリで - と*を使って検索するとゼロドキュメントの問題が解決しました。

注:"fields": ["_all"](または指定しない)とは異なる動作があり、すべてのフィールドを名前(たとえば"fields": ["name", "season"])で指定します。私の最も完全なテストで私はそれを試しました。

0

nameフィールドでは、次の_analyzeクエリ

curl -XGET localhost:9200/test/_analyze?pretty -d 't-shirt' 
{ 
    "tokens" : [ { 
    "token" : "t", 
    "start_offset" : 0, 
    "end_offset" : 1, 
    "type" : "<ALPHANUM>", 
    "position" : 0 
    }, { 
    "token" : "shirt", 
    "start_offset" : 2, 
    "end_offset" : 7, 
    "type" : "<ALPHANUM>", 
    "position" : 1 
    } ] 
} 

で見ることができるようにする代わりに、あなたがshirt*を検索することができますし、いくつかを取得しますstandard analyzerによって分析され、2つのトークンを生成する、すなわちtshirtされました結果

POST myindex/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "shirt*" 
     } 
    } 
} 
+0

はい、よく分かりますが、 "t"と " - "で検索しないようにユーザーに説明することはできません – maxv15

+0

これで[空白解析ツール]を使ってそのフィールドのカスタムマッピングを作成する必要がありますhttps://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html)を入力して、空白とハイフンで入力をトークン化します。 – Val

+0

問題は空白解析ツール – maxv15

0

wildcard query

をお試しください
POST myindex/_search 
{ 
    "query": { 
    "wildcard": { 
     "season": { 
     "value": "2016-*" 
     } 
    } 
    } 
} 
関連する問題