web-dev-qa-db-ja.com

既存のドキュメントを変更せずにelasticsearchで大文字と小文字を区別しないようにする方法はありますか?

Elasticsearchでは、大文字と小文字を区別せずにドキュメントをクエリできますか?または、クエリを実行する前に、大文字と小文字を区別しないものとして保存する必要がありますか?または、大文字と小文字を区別しないようにインデックス全体に設定する必要のある設定はありますか?

この瞬間を明確にしていただけませんか?

5
Skrudox

デフォルトでは、マッピングエラスティックが適用されているため、フィールドでは大文字と小文字が区別されません。

以下をお試しください:

PUT myindex/doc/1
{
  "name":"TEST"
}

GET myindex/_mapping

戻るはずです:

{
  "myindex": {
    "mappings": {
      "doc": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }          
        }
      }
    }
  }
}

以下でクエリを実行すると、一致が返されます(mapping [text andkeyword]に注意してください)。

POST myindex/_search
{
  "query": {
    "match": {
      "name2": "test"
    }
  }
}

ここで、フィールドにkeywordとしてインデックスを付けるように明示的に指定すると、大文字と小文字が区別される検索になります。以下を試してみてください。結果は返されません。

PUT myindex/_mapping/doc
{
  "properties": {
    "name2": {
      "type": "keyword"
    }
  }
}

PUT myindex/doc/1
{
  "name2":"TEST"
}


POST myindex/_search
{
  "query": {
    "match": {
      "name2": "test"
    }
  }
}

TLDR;デフォルトのマッピングまたはtextタイプを使用します-keywordタイプのみにインデックスを付けるようにフィールドを指定すると、大文字と小文字が区別されます。

5