キーワードタイプファミリー

キーワードファミリーには以下のフィールドタイプが含まれます:

  • keyword は、ID、メールアドレス、ホスト名、ステータスコード、郵便番号、またはタグなどの構造化されたコンテンツに使用されます。
  • constant_keyword は、常に同じ値を含むキーワードフィールド用です。
  • wildcard は、非構造化の機械生成コンテンツ用です。wildcardタイプは、大きな値や高いカーディナリティを持つフィールドに最適化されています。

キーワードフィールドは、ソート集約、およびタームレベルのクエリでよく使用されます。例えば、termのようなものです。

フルテキスト検索にはキーワードフィールドを使用しないでください。代わりに、textフィールドタイプを使用してください。

キーワードフィールドタイプ

以下は基本的なkeywordフィールドのマッピングの例です:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "tags": {
  6. "type": "keyword"
  7. }
  8. }
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. tags: {
  7. type: 'keyword'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Go

  1. res, err := es.Indices.Create(
  2. "my-index-000001",
  3. es.Indices.Create.WithBody(strings.NewReader(`{
  4. "mappings": {
  5. "properties": {
  6. "tags": {
  7. "type": "keyword"
  8. }
  9. }
  10. }
  11. }`)),
  12. )
  13. fmt.Println(res, err)

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. tags: {
  6. type: "keyword",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

コンソール

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "tags": {
  6. "type": "keyword"
  7. }
  8. }
  9. }
  10. }

数値識別子のマッピング

すべての数値データをnumericフィールドデータタイプとしてマッピングする必要はありません。Elasticsearchは、integerlongのような数値フィールドをrangeクエリ用に最適化します。しかし、keywordフィールドは、termや他のタームレベルクエリに適しています。

ISBNや製品IDなどの識別子は、rangeクエリではほとんど使用されません。しかし、タームレベルのクエリを使用して頻繁に取得されます。

次の条件を満たす場合、数値識別子をkeywordとしてマッピングすることを検討してください:

  • rangeクエリを使用して識別子データを検索する予定がない場合。
  • 高速な取得が重要です。termクエリは、keywordフィールドでの検索がterm数値フィールドでの検索よりも速いことがよくあります。

どちらを使用するか不明な場合は、multi-fieldを使用してデータをkeyword および 数値データタイプとしてマッピングできます。

基本キーワードフィールドのパラメータ

以下のパラメータはkeywordフィールドで受け入れられます:

  • doc_values
  • フィールドは、ソート、集約、またはスクリプトに使用できるように、ディスクにカラムストライド方式で保存されるべきですか?true(デフォルト)またはfalseを受け入れます。
  • eager_global_ordinals
  • グローバルオーディナルは、リフレッシュ時に早期にロードされるべきですか?trueまたはfalse(デフォルト)を受け入れます。これを有効にすることは、ターム集約に頻繁に使用されるフィールドでは良い考えです。
  • fields
  • マルチフィールドは、異なる目的のために同じ文字列値を複数の方法でインデックス化することを可能にします。例えば、検索用の1つのフィールドと、ソートおよび集約用のマルチフィールドなどです。
  • ignore_above
  • この値よりも長い文字列はインデックス化しません。デフォルトは2147483647で、すべての値が受け入れられます。ただし、デフォルトの動的マッピングルールは、keywordというサブフィールドを作成し、ignore_above: 256を設定することでこのデフォルトを上書きします。
  • index
  • フィールドは迅速に検索可能であるべきですか?true(デフォルト)およびfalseを受け入れます。keywordが有効なフィールドは、クエリ可能ですが、遅くなります。
  • index_options
  • スコア計算のためにインデックスに保存されるべき情報は何ですか。デフォルトはdocsですが、スコア計算時にターム頻度を考慮するためにfreqsに設定することもできます。
  • meta
  • フィールドに関するメタデータ。
  • norms
  • スコアリングクエリの際にフィールドの長さを考慮するべきか。trueまたはfalse(デフォルト)を受け入れます。
  • null_value
  • 明示的なnull値の代わりに置き換えられる文字列値を受け入れます。デフォルトはnullで、フィールドは欠落していると見なされます。script値が使用されている場合、これは設定できません。
  • on_script_error
  • インデックス時にscriptパラメータによって定義されたスクリプトがエラーをスローした場合に何をするかを定義します。fail(デフォルト)を受け入れ、これによりドキュメント全体が拒否され、continueが、ドキュメントの_ignoredメタデータフィールドにフィールドを登録し、インデックスを続行します。このパラメータは、scriptフィールドも設定されている場合にのみ設定できます。
  • script
  • このパラメータが設定されている場合、フィールドはこのスクリプトによって生成された値をインデックス化し、ソースから直接値を読み取るのではなくなります。このフィールドに入力ドキュメントで値が設定されている場合、ドキュメントはエラーで拒否されます。スクリプトはそのランタイム相当物と同じ形式です。スクリプトによって出力された値は通常通り正規化され、ignore_aboveで設定された値よりも長い場合は無視されます。
  • store
  • フィールド値は、_sourceフィールドから別々に保存および取得されるべきですか。trueまたはfalse(デフォルト)を受け入れます。
  • similarity
  • 使用するスコアリングアルゴリズムまたは類似性。デフォルトはBM25です。
  • normalizer
  • インデックス化前にキーワードを前処理する方法。デフォルトはnullで、キーワードはそのまま保持されます。
  • split_queries_on_whitespace
  • フルテキストクエリがこのフィールドのクエリを構築する際に、入力を空白で分割するべきか。trueまたはfalse(デフォルト)を受け入れます。
  • time_series_dimension
  • (オプション、ブール値)
    フィールドを時系列次元としてマークします。デフォルトはfalseです。
    index.mapping.dimension_fields.limitインデックス設定は、インデックス内の次元の数を制限します。
    次元フィールドには以下の制約があります:
    • doc_valuesおよびindexマッピングパラメータはtrueでなければなりません。
    • フィールド値は配列またはマルチバリューであってはなりません。
    • 次元値は、ドキュメントの時系列を識別するために使用されます。インデックス時に次元値が何らかの方法で変更されると、ドキュメントは意図した時系列とは異なるものとして保存されます。その結果、追加の制約があります:
      • フィールドはnormalizerを使用できません。

合成 _source

合成_sourceは、一般的にTSDBインデックス(index.modetime_seriesに設定されているインデックス)のみで利用可能です。他のインデックスでは、合成_sourceは技術プレビュー中です。技術プレビュー中の機能は、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために作業しますが、技術プレビュー中の機能は公式GA機能のサポートSLAの対象ではありません。

  1. デフォルトでは、合成ソースは`````keyword`````フィールドをソートし、重複を削除します。例えば:
  2. #### Python
  3. ``````python
  4. resp = client.indices.create(
  5. index="idx",
  6. mappings={
  7. "_source": {
  8. "mode": "synthetic"
  9. },
  10. "properties": {
  11. "kwd": {
  12. "type": "keyword"
  13. }
  14. }
  15. },
  16. )
  17. print(resp)
  18. resp1 = client.index(
  19. index="idx",
  20. id="1",
  21. document={
  22. "kwd": [
  23. "foo",
  24. "foo",
  25. "bar",
  26. "baz"
  27. ]
  28. },
  29. )
  30. print(resp1)
  31. `

Ruby

  1. response = client.indices.create(
  2. index: 'idx',
  3. body: {
  4. mappings: {
  5. _source: {
  6. mode: 'synthetic'
  7. },
  8. properties: {
  9. kwd: {
  10. type: 'keyword'
  11. }
  12. }
  13. }
  14. }
  15. )
  16. puts response
  17. response = client.index(
  18. index: 'idx',
  19. id: 1,
  20. body: {
  21. kwd: [
  22. 'foo',
  23. 'foo',
  24. 'bar',
  25. 'baz'
  26. ]
  27. }
  28. )
  29. puts response

Js

  1. const response = await client.indices.create({
  2. index: "idx",
  3. mappings: {
  4. _source: {
  5. mode: "synthetic",
  6. },
  7. properties: {
  8. kwd: {
  9. type: "keyword",
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);
  15. const response1 = await client.index({
  16. index: "idx",
  17. id: 1,
  18. document: {
  19. kwd: ["foo", "foo", "bar", "baz"],
  20. },
  21. });
  22. console.log(response1);

コンソール

  1. PUT idx
  2. {
  3. "mappings": {
  4. "_source": { "mode": "synthetic" },
  5. "properties": {
  6. "kwd": { "type": "keyword" }
  7. }
  8. }
  9. }
  10. PUT idx/_doc/1
  11. {
  12. "kwd": ["foo", "foo", "bar", "baz"]
  13. }

次のようになります:

コンソール-結果

  1. {
  2. "kwd": ["bar", "baz", "foo"]
  3. }

もしkeywordフィールドがstoretrueに設定している場合、順序と重複は保持されます。例えば:

Python

  1. resp = client.indices.create(
  2. index="idx",
  3. mappings={
  4. "_source": {
  5. "mode": "synthetic"
  6. },
  7. "properties": {
  8. "kwd": {
  9. "type": "keyword",
  10. "store": True
  11. }
  12. }
  13. },
  14. )
  15. print(resp)
  16. resp1 = client.index(
  17. index="idx",
  18. id="1",
  19. document={
  20. "kwd": [
  21. "foo",
  22. "foo",
  23. "bar",
  24. "baz"
  25. ]
  26. },
  27. )
  28. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'idx',
  3. body: {
  4. mappings: {
  5. _source: {
  6. mode: 'synthetic'
  7. },
  8. properties: {
  9. kwd: {
  10. type: 'keyword',
  11. store: true
  12. }
  13. }
  14. }
  15. }
  16. )
  17. puts response
  18. response = client.index(
  19. index: 'idx',
  20. id: 1,
  21. body: {
  22. kwd: [
  23. 'foo',
  24. 'foo',
  25. 'bar',
  26. 'baz'
  27. ]
  28. }
  29. )
  30. puts response

Js

  1. const response = await client.indices.create({
  2. index: "idx",
  3. mappings: {
  4. _source: {
  5. mode: "synthetic",
  6. },
  7. properties: {
  8. kwd: {
  9. type: "keyword",
  10. store: true,
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);
  16. const response1 = await client.index({
  17. index: "idx",
  18. id: 1,
  19. document: {
  20. kwd: ["foo", "foo", "bar", "baz"],
  21. },
  22. });
  23. console.log(response1);

コンソール

  1. PUT idx
  2. {
  3. "mappings": {
  4. "_source": { "mode": "synthetic" },
  5. "properties": {
  6. "kwd": { "type": "keyword", "store": true }
  7. }
  8. }
  9. }
  10. PUT idx/_doc/1
  11. {
  12. "kwd": ["foo", "foo", "bar", "baz"]
  13. }

次のようになります:

コンソール-結果

  1. {
  2. "kwd": ["foo", "foo", "bar", "baz"]
  3. }
  1. #### Python
  2. ``````python
  3. resp = client.indices.create(
  4. index="idx",
  5. mappings={
  6. "_source": {
  7. "mode": "synthetic"
  8. },
  9. "properties": {
  10. "kwd": {
  11. "type": "keyword",
  12. "ignore_above": 3
  13. }
  14. }
  15. },
  16. )
  17. print(resp)
  18. resp1 = client.index(
  19. index="idx",
  20. id="1",
  21. document={
  22. "kwd": [
  23. "foo",
  24. "foo",
  25. "bang",
  26. "bar",
  27. "baz"
  28. ]
  29. },
  30. )
  31. print(resp1)
  32. `

Ruby

  1. response = client.indices.create(
  2. index: 'idx',
  3. body: {
  4. mappings: {
  5. _source: {
  6. mode: 'synthetic'
  7. },
  8. properties: {
  9. kwd: {
  10. type: 'keyword',
  11. ignore_above: 3
  12. }
  13. }
  14. }
  15. }
  16. )
  17. puts response
  18. response = client.index(
  19. index: 'idx',
  20. id: 1,
  21. body: {
  22. kwd: [
  23. 'foo',
  24. 'foo',
  25. 'bang',
  26. 'bar',
  27. 'baz'
  28. ]
  29. }
  30. )
  31. puts response

Js

  1. const response = await client.indices.create({
  2. index: "idx",
  3. mappings: {
  4. _source: {
  5. mode: "synthetic",
  6. },
  7. properties: {
  8. kwd: {
  9. type: "keyword",
  10. ignore_above: 3,
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);
  16. const response1 = await client.index({
  17. index: "idx",
  18. id: 1,
  19. document: {
  20. kwd: ["foo", "foo", "bang", "bar", "baz"],
  21. },
  22. });
  23. console.log(response1);

コンソール

  1. PUT idx
  2. {
  3. "mappings": {
  4. "_source": { "mode": "synthetic" },
  5. "properties": {
  6. "kwd": { "type": "keyword", "ignore_above": 3 }
  7. }
  8. }
  9. }
  10. PUT idx/_doc/1
  11. {
  12. "kwd": ["foo", "foo", "bang", "bar", "baz"]
  13. }

次のようになります:

コンソール-結果

  1. {
  2. "kwd": ["bar", "baz", "foo", "bang"]
  3. }

定数キーワードフィールドタイプ

定数キーワードは、インデックス内のすべてのドキュメントが同じ値を持つ場合のkeywordフィールドの特化型です。

Python

  1. resp = client.indices.create(
  2. index="logs-debug",
  3. mappings={
  4. "properties": {
  5. "@timestamp": {
  6. "type": "date"
  7. },
  8. "message": {
  9. "type": "text"
  10. },
  11. "level": {
  12. "type": "constant_keyword",
  13. "value": "debug"
  14. }
  15. }
  16. },
  17. )
  18. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'logs-debug',
  3. body: {
  4. mappings: {
  5. properties: {
  6. "@timestamp": {
  7. type: 'date'
  8. },
  9. message: {
  10. type: 'text'
  11. },
  12. level: {
  13. type: 'constant_keyword',
  14. value: 'debug'
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response

Js

  1. const response = await client.indices.create({
  2. index: "logs-debug",
  3. mappings: {
  4. properties: {
  5. "@timestamp": {
  6. type: "date",
  7. },
  8. message: {
  9. type: "text",
  10. },
  11. level: {
  12. type: "constant_keyword",
  13. value: "debug",
  14. },
  15. },
  16. },
  17. });
  18. console.log(response);

コンソール

  1. PUT logs-debug
  2. {
  3. "mappings": {
  4. "properties": {
  5. "@timestamp": {
  6. "type": "date"
  7. },
  8. "message": {
  9. "type": "text"
  10. },
  11. "level": {
  12. "type": "constant_keyword",
  13. "value": "debug"
  14. }
  15. }
  16. }
  17. }
  1. フィールドに値がないドキュメントや、マッピングで設定された値と等しい値を持つドキュメントを送信することは許可されています。以下の2つのインデックスリクエストは同等です:
  2. #### Python
  3. ``````python
  4. resp = client.index(
  5. index="logs-debug",
  6. document={
  7. "date": "2019-12-12",
  8. "message": "Starting up Elasticsearch",
  9. "level": "debug"
  10. },
  11. )
  12. print(resp)
  13. resp1 = client.index(
  14. index="logs-debug",
  15. document={
  16. "date": "2019-12-12",
  17. "message": "Starting up Elasticsearch"
  18. },
  19. )
  20. print(resp1)
  21. `

Ruby

  1. response = client.index(
  2. index: 'logs-debug',
  3. body: {
  4. date: '2019-12-12',
  5. message: 'Starting up Elasticsearch',
  6. level: 'debug'
  7. }
  8. )
  9. puts response
  10. response = client.index(
  11. index: 'logs-debug',
  12. body: {
  13. date: '2019-12-12',
  14. message: 'Starting up Elasticsearch'
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.index({
  2. index: "logs-debug",
  3. document: {
  4. date: "2019-12-12",
  5. message: "Starting up Elasticsearch",
  6. level: "debug",
  7. },
  8. });
  9. console.log(response);
  10. const response1 = await client.index({
  11. index: "logs-debug",
  12. document: {
  13. date: "2019-12-12",
  14. message: "Starting up Elasticsearch",
  15. },
  16. });
  17. console.log(response1);

コンソール

  1. POST logs-debug/_doc
  2. {
  3. "date": "2019-12-12",
  4. "message": "Starting up Elasticsearch",
  5. "level": "debug"
  6. }
  7. POST logs-debug/_doc
  8. {
  9. "date": "2019-12-12",
  10. "message": "Starting up Elasticsearch"
  11. }

ただし、マッピングで設定された値とは異なる値を提供することは許可されていません。

マッピングにvalueが提供されていない場合、フィールドは最初にインデックスされたドキュメントに含まれる値に基づいて自動的に構成されます。この動作は便利ですが、単一の有害なドキュメントが誤った値を持っている場合、他のすべてのドキュメントが拒否される可能性があることに注意してください。

値が提供される前(マッピングまたはドキュメントから)、フィールドに対するクエリはどのドキュメントにも一致しません。これには、existsクエリが含まれます。

フィールドのvalueは、一度設定されると変更できません。

定数キーワードフィールドのパラメータ

以下のマッピングパラメータが受け入れられます:

meta フィールドに関するメタデータ。
value インデックス内のすべてのドキュメントに関連付ける値。 このパラメータが提供されない場合、最初にインデックスされるドキュメントに基づいて設定されます。

ワイルドカードフィールドタイプ

  1. [](#mapping-unstructured-content)
  2. **非構造化コンテンツのマッピング**
  3. 非構造化コンテンツを含むフィールドを`````text`````またはキーワードファミリーフィールドにマッピングできます。最適なフィールドタイプは、コンテンツの性質とフィールドを検索する方法によって異なります。
  4. `````text`````フィールドタイプを使用する場合:
  5. - コンテンツが人間に読みやすい場合(メール本文や製品説明など)。
  6. - `````the
  7. brown fox jumped`````のような個々の単語やフレーズを検索する予定がある場合、[フルテキストクエリ](/read/elasticsearch-8-15/7be69470b0c5db38.md)を使用します。Elasticsearchは、`````text`````フィールドを分析して、これらのクエリに対して最も関連性の高い結果を返します。
  8. キーワードファミリーフィールドタイプを使用する場合:
  9. - コンテンツが機械生成されたものである場合(ログメッセージやHTTPリクエスト情報など)。
  10. - `````org.foo.bar`````のような正確なフル値や、[`````org.foo.*`````]のような部分的な文字列シーケンスを検索する予定がある場合、[タームレベルのクエリ](/read/elasticsearch-8-15/db690ef474a813e8.md)を使用します。
  11. **キーワードファミリーフィールドタイプの選択**
  12. キーワードファミリーフィールドタイプを選択した場合、フィールドを`````keyword`````または`````wildcard`````フィールドとしてマッピングできます。これは、フィールドの値のカーディナリティとサイズによって異なります。`````wildcard`````タイプを使用する場合、[`````wildcard`````](/read/elasticsearch-8-15/883ff0514b763f15.md)または[`````regexp`````](/read/elasticsearch-8-15/18c0a8d633e2b8f9.md)クエリを使用してフィールドを定期的に検索する予定があり、次のいずれかの条件を満たす場合:
  13. - フィールドに100万以上のユニークな値が含まれている。
  14. かつ
  15. リーディングワイルドカードを使用したパターンでフィールドを定期的に検索する予定がある(例:`````*foo`````または`````*baz`````)。
  16. - フィールドに32KBを超える値が含まれている。
  17. かつ
  18. 任意のワイルドカードパターンを使用してフィールドを定期的に検索する予定がある。
  19. そうでなければ、`````keyword`````フィールドタイプを使用して、より高速な検索、より高速なインデックス化、より低いストレージコストを実現します。詳細な比較と意思決定フローチャートについては、[関連ブログ記事](https://www.elastic.co/blog/find-strings-within-strings-faster-with-the-new-elasticsearch-wildcard-field)を参照してください。
  20. **`````text`````フィールドからキーワードフィールドへの切り替え**
  21. 以前に`````text`````フィールドを使用して非構造化の機械生成コンテンツをインデックス化していた場合、[`````keyword`````]または[`````wildcard`````]フィールドにマッピングを更新するために[再インデックス化](e0af58ddfb4e9b0b.md#update-mapping)を行うことができます。また、フィールドに対する単語ベースの[フルテキストクエリ](/read/elasticsearch-8-15/7be69470b0c5db38.md)を同等の[タームレベルのクエリ](/read/elasticsearch-8-15/db690ef474a813e8.md)に置き換えるために、アプリケーションやワークフローを更新することをお勧めします。
  22. 内部的に、`````wildcard`````フィールドは、ngramを使用してフィールド全体の値をインデックス化し、完全な文字列を保存します。インデックスは、値の数を減らすための粗いフィルターとして使用され、その後、完全な値を取得して確認することによってチェックされます。このフィールドは、ログ行に対してgrepのようなクエリを実行するのに特に適しています。ストレージコストは通常、`````keyword`````フィールドよりも低いですが、完全なタームの正確な一致の検索速度は遅くなります。フィールド値が多くの接頭辞を共有している場合(同じウェブサイトのURLなど)、`````wildcard`````フィールドのストレージコストは、同等の`````keyword`````フィールドよりも高くなる可能性があります。
  23. ワイルドカードフィールドをインデックス化して検索する方法は次のとおりです。
  24. #### Python
  25. ``````python
  26. resp = client.indices.create(
  27. index="my-index-000001",
  28. mappings={
  29. "properties": {
  30. "my_wildcard": {
  31. "type": "wildcard"
  32. }
  33. }
  34. },
  35. )
  36. print(resp)
  37. resp1 = client.index(
  38. index="my-index-000001",
  39. id="1",
  40. document={
  41. "my_wildcard": "This string can be quite lengthy"
  42. },
  43. )
  44. print(resp1)
  45. resp2 = client.search(
  46. index="my-index-000001",
  47. query={
  48. "wildcard": {
  49. "my_wildcard": {
  50. "value": "*quite*lengthy"
  51. }
  52. }
  53. },
  54. )
  55. print(resp2)
  56. `

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. my_wildcard: {
  7. type: 'wildcard'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response
  14. response = client.index(
  15. index: 'my-index-000001',
  16. id: 1,
  17. body: {
  18. my_wildcard: 'This string can be quite lengthy'
  19. }
  20. )
  21. puts response
  22. response = client.search(
  23. index: 'my-index-000001',
  24. body: {
  25. query: {
  26. wildcard: {
  27. my_wildcard: {
  28. value: '*quite*lengthy'
  29. }
  30. }
  31. }
  32. }
  33. )
  34. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. my_wildcard: {
  6. type: "wildcard",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);
  12. const response1 = await client.index({
  13. index: "my-index-000001",
  14. id: 1,
  15. document: {
  16. my_wildcard: "This string can be quite lengthy",
  17. },
  18. });
  19. console.log(response1);
  20. const response2 = await client.search({
  21. index: "my-index-000001",
  22. query: {
  23. wildcard: {
  24. my_wildcard: {
  25. value: "*quite*lengthy",
  26. },
  27. },
  28. },
  29. });
  30. console.log(response2);

コンソール

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "my_wildcard": {
  6. "type": "wildcard"
  7. }
  8. }
  9. }
  10. }
  11. PUT my-index-000001/_doc/1
  12. {
  13. "my_wildcard" : "This string can be quite lengthy"
  14. }
  15. GET my-index-000001/_search
  16. {
  17. "query": {
  18. "wildcard": {
  19. "my_wildcard": {
  20. "value": "*quite*lengthy"
  21. }
  22. }
  23. }
  24. }

ワイルドカードフィールドのパラメータ

以下のパラメータはwildcardフィールドで受け入れられます:

null_value 明示的なnull値の代わりに置き換えられる文字列値を受け入れます。デフォルトはnullで、フィールドは欠落していると見なされます。
ignore_above この値よりも長い文字列はインデックス化しません。デフォルトは2147483647で、すべての値が受け入れられます。

制限

  • wildcardフィールドはキーワードフィールドのようにトークン化されていないため、フレーズクエリなどの単語の位置に依存するクエリをサポートしていません。
  • wildcardクエリを実行する際、rewriteパラメータは無視されます。スコアは常に一定のスコアです。

合成 _source

  1. 合成ソースは常に`````wildcard`````フィールドをソートします。例えば:
  2. #### Python
  3. ``````python
  4. resp = client.indices.create(
  5. index="idx",
  6. mappings={
  7. "_source": {
  8. "mode": "synthetic"
  9. },
  10. "properties": {
  11. "card": {
  12. "type": "wildcard"
  13. }
  14. }
  15. },
  16. )
  17. print(resp)
  18. resp1 = client.index(
  19. index="idx",
  20. id="1",
  21. document={
  22. "card": [
  23. "king",
  24. "ace",
  25. "ace",
  26. "jack"
  27. ]
  28. },
  29. )
  30. print(resp1)
  31. `

Ruby

  1. response = client.indices.create(
  2. index: 'idx',
  3. body: {
  4. mappings: {
  5. _source: {
  6. mode: 'synthetic'
  7. },
  8. properties: {
  9. card: {
  10. type: 'wildcard'
  11. }
  12. }
  13. }
  14. }
  15. )
  16. puts response
  17. response = client.index(
  18. index: 'idx',
  19. id: 1,
  20. body: {
  21. card: [
  22. 'king',
  23. 'ace',
  24. 'ace',
  25. 'jack'
  26. ]
  27. }
  28. )
  29. puts response

Js

  1. const response = await client.indices.create({
  2. index: "idx",
  3. mappings: {
  4. _source: {
  5. mode: "synthetic",
  6. },
  7. properties: {
  8. card: {
  9. type: "wildcard",
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);
  15. const response1 = await client.index({
  16. index: "idx",
  17. id: 1,
  18. document: {
  19. card: ["king", "ace", "ace", "jack"],
  20. },
  21. });
  22. console.log(response1);

コンソール

  1. PUT idx
  2. {
  3. "mappings": {
  4. "_source": { "mode": "synthetic" },
  5. "properties": {
  6. "card": { "type": "wildcard" }
  7. }
  8. }
  9. }
  10. PUT idx/_doc/1
  11. {
  12. "card": ["king", "ace", "ace", "jack"]
  13. }

次のようになります:

コンソール-結果

  1. {
  2. "card": ["ace", "jack", "king"]
  3. }