2017-05-15 9 views
0

完全一致で文書に結果を制限:Elasticsearch:現在、私は次のクエリとElasticsearch(5.4)の結果を制限しようとしている

{ 
    "query": { 
    "bool": { 
     "must": { 
     "multi_match": { 
      "query": "apache log Linux", 
      "type": "most_fields", 
      "fields": [ 
      "message", 
      "type" 
      ] 
     } 
     }, 
     "filter": { 
     "term": { 
      "client": "test" 
     } 
     } 
    } 
    } 
} 

をこれが「"apache"が含まれているすべての文書、"logを返し、または"linux" I。 正確なの指定値の場合は"test"のフィールド "client"を持つ文書に結果を制限したいが、このクエリは "test"を値として含むすべての文書を返す。"client": "test client"の文書もまた 私は厳密に制限したいので"client": "test"の文書のみが返され、"client": "test client"は返されません。

さまざまなクエリと多数の検索をテストした後、私の問題の解決策を見つけることができません。私は何が欠けていますか?

答えて

1

ようになり、keywordがすでにある:

"filter": { 
    "term": { 
     "client.keyword": "test" 
    } 
    } 
+0

フィールド 'client.keyword'は結果を返しません。私は私のインデックスのマッピングを調べて、 'client.raw'が' keyword'とタイプされていることを発見しました。したがって、5.xがキーワードをデフォルトとしてマップするのは事実です。したがって、 'client.raw'を使うと私の問題は解決します。ありがとう! – Yokovaski

1

インデックスにclientフィールドがkeyword datatypeであることを指定するマッピングを設定します。

マッピング要求が、これは5.xと、デフォルトによってであるからだけで、あなたのclientフィールドのkeyword一部を使用

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "client": { 
      "type": "keyword" 
     } 
     } 
    } 
    } 
} 
+0

「keyword」データ型が私の問題を解決することを指摘してくれてありがとう。私は、Elasticsearchにデータを書き込むためにlogstashを使用しているため、フィールドのマッピングを変更することはできません。ただし、既定では.rawにキーワードマッピングが既に存在しています。 – Yokovaski

関連する問題