2016-06-22 12 views
0

インデックスを設定していますが、部分的な単語を1回だけ行う検索をしたいのですが、1フィールドの検索とそれ以外の通常の検索フィールドの。私が理解するところでは、これはちょうど_allにマッチングすることでやりやすいはずです。しかし、私はそれを動作させるように見えることはできません。_all内のedge_ngramフィールドを照会することができません

私は_allを検索boolクエリと別に、特定のnグラムフィールドから目的の結果を得ることができたが、それはhackeyようだと私は私が欠けているという単純な何かがちょうどあります推測しています。

ここでは、私がやっていることとそれが私にとってうまくいかないことを示すための最小限の例です。

curl -XPUT "http://localhost:9200/test_index?pretty=true" -d' 
{ 
    "settings": { 
     "analysis": { 
     "filter": { 
      "edge_ngram_filter": { 
       "type": "edge_ngram", 
       "min_gram": 2, 
       "max_gram": 20 
      } 
     }, 
     "analyzer": { 
      "edge_ngram_analyzer": { 
       "type": "custom", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "edge_ngram_filter" 
       ] 
      } 
     } 
     } 
    }, 
    "mappings": { 
     "doc": { 
     "properties": { 
      "text_field": { 
       "type": "string", 
       "analyzer": "edge_ngram_analyzer", 
       "search_analyzer": "standard" 
      } 
     } 
     } 
    } 
}' 

、簡単な文書を追加します:部分検索_all

curl -XPUT "http://localhost:9200/test_index/doc/1?pretty=true" -d' 
{ 
    "text_field": "Hello, World!" 
}' 

を動作しません。ここ

は、インデックスの設定があります。空の結果を返します。

curl -XPOST "http://localhost:9200/test_index/_search?pretty=true" -d' 
{ 
    "query": { 
     "match": { 
      "_all": "hell" 
     } 
    } 
}' 

単語全体の検索は

curl -XPOST "http://localhost:9200/test_index/_search?pretty=true" -d' 
{ 
    "query": { 
     "match": { 
      "_all": "hello" 
     } 
    } 
}' 

かかわらず動作し、特定のフィールド上の部分検索が

curl -XPOST "http://localhost:9200/test_index/_search?pretty=true" -d' 
{ 
    "query": { 
     "match": { 
      "text_field": "hell" 
     } 
    } 
}' 

の作品_all用語ベクトルが正常に見えるすぎ

curl -XGET "http://localhost:9200/test_index/doc/1/_termvector?fields=text_field&pretty=true" 

I本当に理解できない私がここで間違っていることを取り除く。どんな助けもありがとう。

ここに私の環境に関するいくつかの詳細があります。

  • Elasticsearchバージョン:Version: 2.3.3, Build: 218bdf1/2016-05-17T15:40:04Z, JVM: 1.8.0_92
  • のLinux OS:アーチのLinux
  • カーネルのバージョン:_allフィールドは、文字列、いないために生産条件として、すべてのフィールドの元の値を組み合わせた4.4.3-1-custom

答えて

1

各フィールド。したがって、お客様のケースでは、edge_ngram_analyzerによって生成された語句は含まれず、text_fieldフィールドのテキストのみが含まれます。他のテキストフィールドと同様に、アナライザーを指定することもできます。この例では、デフォルトのアナライザーを使用しています。

+0

お返事ありがとうございます。あなたは '_all'フィールドのためにアナライザをどのように変更できるか知っていますか?マッピングに追加しようとすると、 'マッピングの解析に失敗しました:フィールド[_all]が[doc]に2回定義されています。 – aNoble

+0

心配しないでください。 {mappings:{doc:{_all:{analyser: "edge_ngram_analyzer"}}}} ' – aNoble

+0

それは方法です。 _allマッピングは、プロパティのルートではなく、そのタイプの下にある必要があります。 –

関連する問題