2017-07-21 26 views
0

ここで、キーワードは構造化されていないテキストを含むはずではありませんが、何らかの理由でそのようなテキストがキーワードフィールドに書き込まれたとしましょう。 一致または用語のクエリを使用してそのようなドキュメントを検索する場合、ドキュメントは見つかりませんが、query_stringを使用して検索すると、部分一致(キーワードの「用語」)によってドキュメントが検索されます。私はElasticsearchのためのドキュメントがタームのトークン化なしでキーワードが逆索引付けされていることを明確に述べているとき、これがどのように可能であるか理解していません。 例: 私のインデックスマッピング:Elasticsearch query_string複雑なキーワードをキーワードで検索します

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "full_text": { 
      "type": "text" 
     }, 
     "exact_value": { 
      "type": "keyword" 
     } 
     } 
    } 
    } 
} 

は、それから私は、文書を置く:

PUT my_index/my_type/2 
{ 
    "full_text": "full text search", 
    "exact_value": "i want to find this trololo!" 
} 

そして、私はキーワードの用語ではなく、完全に一致して、文書を取得するときに私の驚きを想像:

GET my_index/my_type/_search 
{ 
    "query": { 
    "match": { 
     "exact_value": "trololo" 
    } 
    } 
} 

- 結果はありません。

GET my_index/my_type/_search 
{ 
    "query": { 
    "term": { 
     "exact_value": "trololo" 
    } 
    } 
} 

- 結果なし。

POST my_index/_search 
{"query":{"query_string":{"query":"trololo"}}} 

- 私の文書が返されます。

 "hits": { 
     "total": 1, 
     "max_score": 0.27233246, 
     "hits": [ 
     { 
      "_index": "my_index", 
      "_type": "my_type", 
      "_id": "2", 
      "_score": 0.27233246, 
      "_source": { 
       "full_text": "full text search", 
       "exact_value": "i want to find this trololo!" 
      } 
     } 
     ] 
    } 

答えて

2

あなたは

POST index/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "trololo" 
     } 
    } 
} 

以下のような弾性のQUERY_STRINGのクエリを実行すると、この実際にどの場合_allフィールド上の検索を行います(!)標準的なアナライザーで分析して弾力性を発揮するとは言いません。

次のようなクエリでフィールドを指定すると、キーワードフィールドのレコードは取得されません。

POST my_index/_search 
{ 
    "query": { 
    "query_string": { 
     "default_field": "exact_value", 
     "query": "field" 
    } 
    } 
} 
+0

が理にかなっています。確かに私はすべてのフィールドを知っていますが、ちょうど最近、Elasticスタックの調査を開始して以来、実践的な経験が足りませんでした。ありがとう! – yuranos87

関連する問題