web-dev-qa-db-ja.com

ElasticSearchで分析しない方法は?

ElasticSearchフィールドに、分析したくないフィールドがあります。 e。保存して比較する必要があります。値には、文字、数字、空白、ダッシュ、スラッシュ、およびその他の文字が含まれます。

このフィールドのマッピングでアナライザーを指定しない場合、デフォルトでは、文字列を単語の塊にハッキングするトークナイザーが使用されます。私はそれを望んでいません。

基本的に分析しない、非常にシンプルなアナライザーはありますか?または、このフィールドを分析しないことを示す別の方法がありますか?

インデックスを作成するだけで、他には何もしません。事前に構成されたアナライザーの組み込み名と思われる他のフィールドには、「english」などのアナライザーを使用できます。他の名前のリストはありますか?私のニーズに合ったものがあるかもしれません(つまり、入力に対して何もしません)。

これは現在私のマッピングです:

{
  "my_type": {
    "properties": {
      "my_field1": { "type": "string", "analyzer": "english" },
      "my_field2": { "type": "string" }
    }
  }
}

my_field1は言語依存です。これはうまくいくようです。 my_field2は逐語的でなければなりません。そこで、何もしないアナライザーを提供したいと思います。

my_field2のサンプル値は"B45c 14/04"です。

42
Alfe
"my_field2": {
    "properties": {
        "title": {
            "type": "string",
            "index": "not_analyzed"
        }
    }
}

詳細については、こちらをご覧ください https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-core-types.html .

52
Scott Rice

here のようにstringkeywordと ``に置き換えられた)タイプが削除されたため、これはもはや当てはまりません。代わりに、"index": true | falseを使用する必要があります。

例OLDの場合:

{
  "foo": {
    "type" "string",
    "index": "not_analyzed"
  }
}

新規になります:

{
  "foo": {
    "type" "keyword",
    "index": true
  }
}

つまり、フィールドはインデックス付けされますが、keywordと入力されるため、暗黙的に分析されません。

30
vanthome

keywordアナライザーも使用できます。

_// don't actually use this, use "index": "not_analyzed" instead
{
  "my_type": {
    "properties": {
      "my_field1": { "type": "string", "analyzer": "english" },
      "my_field2": { "type": "string", "analyzer": "keyword" }
    }
  }
}
_

ここに記載されているように: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.html 、これらのフィールドを_not_analyzed_。

ただし、keywordアナライザーは、デフォルトでインデックス全体に設定されている場合に役立ちます。

更新:コメントで述べたように、stringは5.Xではサポートされなくなりました

3
denis.peplin