インデックスを設定していますが、部分的な単語を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
お返事ありがとうございます。あなたは '_all'フィールドのためにアナライザをどのように変更できるか知っていますか?マッピングに追加しようとすると、 'マッピングの解析に失敗しました:フィールド[_all]が[doc]に2回定義されています。 – aNoble
心配しないでください。 {mappings:{doc:{_all:{analyser: "edge_ngram_analyzer"}}}} ' – aNoble
それは方法です。 _allマッピングは、プロパティのルートではなく、そのタイプの下にある必要があります。 –