2016-05-30 1 views
0

私は「アセット」と呼ばれるもののためのドキュメントを作成するエラスティックサーチレポとアプリケーションを持っています。私は、ユーザーが同じ「タイトル」で「資産」を作成するのを防ぐ必要があります。エラスティックサーチマッチ正確な用語

ユーザーが「アセット」を作成しようとすると、私はタイトルでリポジトリに問い合わせています。一致するものがあれば、エラーメッセージが表示されます。

私の問題は、私がタイトルを照会するときに、私は複数の結果を得ていることです(類似の一致の場合)。

これは、これまでのところ、私のクエリは次のとおりです。「テスト1」、「テスト2」、「テストBLA」とタイトル「試験」とのみ1:

GET assets-1/asset/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "test", 
     "operator": "and" 
     } 
    } 
    } 
} 

私はタイトルの多くのレコードを持っています。

しかし、私は上記のすべてを得ています。

条件に一致するようにクエリに追加する必要がある条件やプロパティはありますか?

答えて

0

あなたのタイトルフィールドはおそらく分析されているため、testトークンはそのトークンを含むタイトルと一致します。

完全一致を実装するには、not_analyzedフィールドがあり、そのフィールドにtermクエリが必要です。

あなたがこれまであなたtitleフィールドのマッピングを変更する必要があります。

curl -XPUT localhost:9200/assets-1/_mapping/asset -d '{ 
    "asset": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
     } 
    } 
}' 

次に、あなたがあなたのデータのインデックスを再作成する必要があり、あなたは、このような完全一致のクエリを実行できるようになります:

curl -XPOST localhost:9200/assets-1/asset/_search -d '{ 
    "query": { 
     "term": { 
     "title.raw": "test" 
     } 
    } 
}' 
+0

ありがとうございました+ Val、フィールドはすでに "not_analyzed"でしたが、 ".raw"パートはトリックでした。 – Yatiac

+0

あなたはそれを考え出してうれしい、うれしい!! – Val

+0

さらにもう1つ、大文字と小文字を区別しないようにするにはどうしてですか? – Yatiac

関連する問題