2012-07-25 10 views
29

私はelasticsearchにはかなり新しく、ちょっとした説明が必要です。 検索サーバーにクエリを実行中にアナライザを定義できますか?私は「テキスト」と「フィールド」のクエリでそれを試してみましたが、それが正常に動作します:elasticSearchでクエリを実行している間にアナライザを定義する

問合せ:

curl -XPOST http://localhost:9200/test/user/_search? -d '{ "query" : { 
"text" : {"_all" : {"query" :"Vaibhav","analyzer" : 
"lowercase_keyword" }} } }' 

結果:

{"took":144,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.10848885,"hits":{"_index":"test","_type":"user","_id":"1","_score":0.10848885, 
"_source" : { 
    "first_name": "Vaibhav", 
    "last_name":"saini", 
    "password":"pwd" 

しかし、私は同じことをしようとするとき、

クエリ:

curl -XPOST http://localhost:9200/test/user/_search? -d '{ 
"query" : { "term" : {"_all" : {"query" :"Vaibhav","analyzer" : 
"lowercase_keyword" }} } }' 
用語/プレフィックス/ワイルドカードクエリ私は例外を取得します

結果:

{"error":"SearchPhaseExecutionException[Failed to execute phase [query], total failure; shardFailures 
{[kws9J6tbQtWCMNKBm3Gpkw][test][4]: SearchParseException[[test][4]: 
from[-1],size[-1]: Parse Failure [Failed to parse source 
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\" 
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested: 
QueryParsingException[[test] [term] query does not support [query]]; 
}{[kws9J6tbQtWCMNKBm3Gpkw][test][1]: SearchParseException[[test][1]: 
from[-1],size[-1]: Parse Failure [Failed to parse source 
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\" 
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested: 
QueryParsingException[[test] [term] query does not support [query]]; 
}{[kws9J6tbQtWCMNKBm3Gpkw][test][2]: SearchParseException[[test][2]: 
from[-1],size[-1]: Parse Failure [Failed to parse source 
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\" 
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested: 
QueryParsingException[[test] [term] query does not support [query]]; 
}]","status":500} 

だから、クエリの一部のタイプのために、我々はできる他人のためにelasticsearchサーバーを照会しながら、私たちはanalayzersを定義することはできませんのようなものですか?そうでない場合、私は間違って何かをしていますか?

ご協力いただきまして誠にありがとうございます。

答えて

21

term,prefixおよびwildcardクエリでは、クエリで指定された値がすでに解析されていると見なされます。

+2

elasticsearch文書には、用語クエリが記載されています。用語(分析されていない)を含むフィールドを持つ文書と一致します。 http://www.elasticsearch.org/guide/reference/query-dsl/term-query.html – vaibhav

+0

ありがとうImotov。しかし、私は疑問がある場合は、この場合、上記の例では、私はどのようなケーシングを使用しているかに関係なく、結果を取得する必要があります。例: "first_name"フィールドのインデックスデータは "Vaibhav"また、このフィールドに使用されるアナライザは、トークナイザを「キーワード」として使用し、フィルタを「小文字」としてフィルタリングするカスタムアナライザであるため、データが期待どおりの「Vaibhav」ではなく「vaibhav」としてインデックス付けされます。 –

+1

今私は "vaibhav"で用語/プレフィックス/ワイルドカードクエリを使用してクエリを実行すると結果が得られますが、 "Vaibhav"でクエリを実行すると結果が得られません(vaibhavというインデックスが付けられている可能性があります) 。だからここでの私の要求は、私のクエリは大文字と小文字を区別しないことです。 thanks –

4

この構文は私の仕事:

GET /_search 
{ 
    "query": { 
    "match_phrase": { 
     "controller": { 
     "analyzer": "keyword", 
     "query": "api/v2/test" 
     } 
    } 
    } 
} 

documentationで詳細を検索します。

+0

このJSONは私のためには機能しませんが、アナライザが必要です。 – Sinux

0

カスタムのsearch-analyzerをクエリに使用することができます。ドキュメントから

は通常、同じアナライザは中の用語 としてクエリ内の用語が同じ形式であることを保証するために、インデックス時と 検索時に適用されるべきです逆インデックス。

ただし、autoconcompleteのためにanalysis-edgengram-tokenizerを使用する場合など、別のアナライザーを検索時に使用すると意味があります( )。デフォルトでは

、クエリは、フィールドマッピングに定義されてanalyzerを使用しますが、 が、これはsearch_analyzerは、ドキュメントにも例をリスト

の設定で無効にすることができます。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html

関連する問題