2016-04-19 8 views
0

私の使用例では、後ろにワイルドカードを使用した弾性検索ドメインをクエリする必要があります。私は、そのようなワイルドカードをクエリで処理するベストプラクティスについて意見を出したいと思っていました。弾性検索構造化クエリでワイルドカードを処理する方法

"query" : { 
    "query_string" : { 
     "query" : "attribute:postfix*", 
     "analyze_wildcard" : true, 
     "allow_leading_wildcard" : false, 
     "use_dis_max" : false 
    } 
} 

それが重い操作ですので、私は大手ワイルドカードを禁止しました:

では、次の句を追加すると、クエリの良い習慣だと思います。しかし、私は長期的にどのクエリ要求に対してもワイルドカードを分析するのがどれほど良いかを考えたかったのです。私の理解は、クエリが実際にワイルドカードを持っていない場合、分析ワイルドカードは影響を与えません。あれは正しいですか?

答えて

0

マッピングタイプとインデックスの設定を変更する可能性がある場合は、attributeフィールドのすべてのプレフィックスにインデックスを付けるedge-n-gram token filterのカスタムアナライザを作成してください。その後

curl -XPUT http://localhost:9200/your_index -d '{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "edge_filter": { 
        "type": "edgeNGram", 
        "min_gram": 1, 
        "max_gram": 15 
       } 
      }, 
      "analyzer": { 
       "attr_analyzer": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": ["lowercase", "edge_filter"] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "your_type": { 
      "properties": { 
       "attribute": { 
        "type": "string", 
        "analyzer": "attr_analyzer", 
        "search_analyzer": "standard" 
       } 
      } 
     } 
    } 
}' 

、ときにインデックス文書、postfixingは、以下のトークンとして索引付けされます(例えば)attributeフィールド値:ppopospostpostfpostfipostfixpostfixipostfixinpostfixing

最後に、このような簡単なmatchクエリを使用してpostfix値のattributeフィールドを簡単にクエリできます。クエリ文字列クエリでパフォーマンスの低いワイルドカードを使用する必要はありません。

{ 
    "query": { 
    "match" : { 
     "attribute" : "postfix" 
    } 
    } 
} 
+0

この情報は役に立ちましたか?もっと情報が必要ですか? – Val

関連する問題