2016-05-25 9 views
1

私はelasticsearchをPythonでクライアントとして使用しています。私は会社のリストを照会したい。言う会社フィールド値iは、クエリの試合中にNを入れたときに私はNormnまたはNerthを得ることはありません(elasticsearch-DSLパイソンを使用して)文字を弾性検索で手紙で検索する

Gokl 
Normn 
Nerth 

シナリオ1

s = Search(using=client, index="index-test") \ 
.query("match", Company="N") 

です。私はおそらく言葉に基づいてトークン化のためだと思う。私はNormnを入力すると

(elasticsearch-DSLパイソンを使用して)シナリオ2

s = Search(using=client, index="index-test") \ 
.query("match", Company="Normn") 

私は明らかに出力を得ます。では、上記のシナリオ1のように、文字nを入力すると検索を有効にするにはどうすればいいですか。

+1

match'のみで動作します 'として、代わりに' query_string'を使用してみてください完全に索引付けされたトークンであり、一部ではありません。より複雑な方法では、インデックス作成時にedgeNGramトークンフィルタを使用する必要があります。 – Val

+0

そして[documentation](https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-matching.html)を読んでください。これは本当にうれしくて、多くの例があります。 –

+0

クエリ文字列は、一致と同じ結果を示します。私はもうフィルターやマッピングを追加する –

答えて

0

プレフィックス検索を探していると思います。私は、Pythonの構文を知らないが、直接のクエリは次のようになります。

GET index-test/_search 
{ 
    "query": { 
    "prefix": { 
     "company": { 
     "value": "N" 
     } 
    } 
    } 
} 

は、詳細はhereを参照してください。私はあなたが会社がこのクエリを使用することができます。この場合、特定の文字

で開始照会する必要が正しく理解していれば

0

{ 
    "query": { 
    "regexp": { 
     "Company": "n.*" 
    } 
    } 
}