Analyze API

分析をテキスト文字列に対して実行し、結果のトークンを返します。

Python

  1. resp = client.indices.analyze(
  2. analyzer="standard",
  3. text="Quick Brown Foxes!",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. analyzer: 'standard',
  4. text: 'Quick Brown Foxes!'
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.analyze({
  2. analyzer: "standard",
  3. text: "Quick Brown Foxes!",
  4. });
  5. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "analyzer" : "standard",
  4. "text" : "Quick Brown Foxes!"
  5. }

Request

GET /_analyze

POST /_analyze

GET /<index>/_analyze

POST /<index>/_analyze

Prerequisites

  • Elasticsearchのセキュリティ機能が有効な場合、指定されたインデックスに対してmanage インデックス権限を持っている必要があります。

Path parameters

  • <index>
  • (オプション、文字列) アナライザーを導出するために使用されるインデックス。
    指定された場合、analyzerまたは<field>パラメータがこの値を上書きします。
    アナライザーまたはフィールドが指定されていない場合、analyze APIはインデックスのデフォルトアナライザーを使用します。
    インデックスが指定されていない場合、またはインデックスにデフォルトアナライザーがない場合、analyze APIは標準アナライザーを使用します。

Query parameters

  • analyzer
  • (オプション、文字列) 提供されたtextに適用されるべきアナライザーの名前。このアナライザーは組み込みアナライザーであるか、インデックスで構成されたアナライザーである可能性があります。
    このパラメータが指定されていない場合、analyze APIはフィールドのマッピングで定義されたアナライザーを使用します。
    フィールドが指定されていない場合、analyze APIはインデックスのデフォルトアナライザーを使用します。
    インデックスが指定されていない場合、またはインデックスにデフォルトアナライザーがない場合、analyze APIは標準アナライザーを使用します。
  • attributes
  • (オプション、文字列の配列) explainパラメータの出力をフィルタリングするために使用されるトークン属性の配列。
  • char_filter
  • (オプション、文字列の配列) トークナイザーの前に文字を前処理するために使用される文字フィルターの配列。文字フィルターのリストについては文字フィルターのリファレンスを参照してください。
  • explain
  • (オプション、ブール値) trueの場合、レスポンスにはトークン属性と追加の詳細が含まれます。デフォルトはfalseです。 [プレビュー] 追加の詳細情報の形式はLuceneで実験的とラベル付けされており、将来的に変更される可能性があります。
  • field
  • (オプション、文字列) アナライザーを導出するために使用されるフィールド。このパラメータを使用するには、インデックスを指定する必要があります。
    指定された場合、analyzerパラメータがこの値を上書きします。
    フィールドが指定されていない場合、analyze APIはインデックスのデフォルトアナライザーを使用します。
    インデックスが指定されていない場合、またはインデックスにデフォルトアナライザーがない場合、analyze APIは標準アナライザーを使用します。
  • filter
  • (オプション、文字列の配列) トークナイザーの後に適用されるトークンフィルターの配列。トークンフィルターのリストについてはトークンフィルターのリファレンスを参照してください。
  • normalizer
  • (オプション、文字列) テキストを単一のトークンに変換するために使用されるノーマライザー。ノーマライザーのリストについてはノーマライザーを参照してください。
  • text
  • (必須、文字列または文字列の配列) 分析するテキスト。文字列の配列が提供される場合、それはマルチバリューフィールドとして分析されます。
  • tokenizer
  • (オプション、文字列) テキストをトークンに変換するために使用されるトークナイザー。トークナイザーのリストについてはトークナイザーのリファレンスを参照してください。

Examples

No index specified

インデックスを指定せずに、任意の組み込みアナライザーをテキスト文字列に適用できます。

Python

  1. resp = client.indices.analyze(
  2. analyzer="standard",
  3. text="this is a test",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. analyzer: 'standard',
  4. text: 'this is a test'
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.analyze({
  2. analyzer: "standard",
  3. text: "this is a test",
  4. });
  5. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "analyzer" : "standard",
  4. "text" : "this is a test"
  5. }

Array of text strings

  1. #### Python
  2. ``````python
  3. resp = client.indices.analyze(
  4. analyzer="standard",
  5. text=[
  6. "this is a test",
  7. "the second text"
  8. ],
  9. )
  10. print(resp)
  11. `

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. analyzer: 'standard',
  4. text: [
  5. 'this is a test',
  6. 'the second text'
  7. ]
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.indices.analyze({
  2. analyzer: "standard",
  3. text: ["this is a test", "the second text"],
  4. });
  5. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "analyzer" : "standard",
  4. "text" : ["this is a test", "the second text"]
  5. }

Custom analyzer

analyze APIを使用して、トークナイザー、トークンフィルター、文字フィルターから構築されたカスタム一時アナライザーをテストできます。トークンフィルターはfilterパラメータを使用します:

Python

  1. resp = client.indices.analyze(
  2. tokenizer="keyword",
  3. filter=[
  4. "lowercase"
  5. ],
  6. text="this is a test",
  7. )
  8. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'keyword',
  4. filter: [
  5. 'lowercase'
  6. ],
  7. text: 'this is a test'
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "keyword",
  3. filter: ["lowercase"],
  4. text: "this is a test",
  5. });
  6. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "tokenizer" : "keyword",
  4. "filter" : ["lowercase"],
  5. "text" : "this is a test"
  6. }

Python

  1. resp = client.indices.analyze(
  2. tokenizer="keyword",
  3. filter=[
  4. "lowercase"
  5. ],
  6. char_filter=[
  7. "html_strip"
  8. ],
  9. text="this is a test</b>",
  10. )
  11. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'keyword',
  4. filter: [
  5. 'lowercase'
  6. ],
  7. char_filter: [
  8. 'html_strip'
  9. ],
  10. text: 'this is a test</b>'
  11. }
  12. )
  13. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "keyword",
  3. filter: ["lowercase"],
  4. char_filter: ["html_strip"],
  5. text: "this is a test</b>",
  6. });
  7. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "tokenizer" : "keyword",
  4. "filter" : ["lowercase"],
  5. "char_filter" : ["html_strip"],
  6. "text" : "this is a <b>test</b>"
  7. }

カスタムトークナイザー、トークンフィルター、文字フィルターは、リクエストボディに次のように指定できます:

Python

  1. resp = client.indices.analyze(
  2. tokenizer="whitespace",
  3. filter=[
  4. "lowercase",
  5. {
  6. "type": "stop",
  7. "stopwords": [
  8. "a",
  9. "is",
  10. "this"
  11. ]
  12. }
  13. ],
  14. text="this is a test",
  15. )
  16. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'whitespace',
  4. filter: [
  5. 'lowercase',
  6. {
  7. type: 'stop',
  8. stopwords: [
  9. 'a',
  10. 'is',
  11. 'this'
  12. ]
  13. }
  14. ],
  15. text: 'this is a test'
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "whitespace",
  3. filter: [
  4. "lowercase",
  5. {
  6. type: "stop",
  7. stopwords: ["a", "is", "this"],
  8. },
  9. ],
  10. text: "this is a test",
  11. });
  12. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "tokenizer" : "whitespace",
  4. "filter" : ["lowercase", {"type": "stop", "stopwords": ["a", "is", "this"]}],
  5. "text" : "this is a test"
  6. }

Specific index

特定のインデックスに対してanalyze APIを実行することもできます:

Python

  1. resp = client.indices.analyze(
  2. index="analyze_sample",
  3. text="this is a test",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. index: 'analyze_sample',
  3. body: {
  4. text: 'this is a test'
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.analyze({
  2. index: "analyze_sample",
  3. text: "this is a test",
  4. });
  5. console.log(response);

Console

  1. GET /analyze_sample/_analyze
  2. {
  3. "text" : "this is a test"
  4. }

上記は、analyze_sampleインデックスに関連付けられたデフォルトインデックスアナライザーを使用して、「これはテストです」というテキストの分析を実行します。analyzerを提供することもでき、異なるアナライザーを使用できます:

Python

  1. resp = client.indices.analyze(
  2. index="analyze_sample",
  3. analyzer="whitespace",
  4. text="this is a test",
  5. )
  6. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. index: 'analyze_sample',
  3. body: {
  4. analyzer: 'whitespace',
  5. text: 'this is a test'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.analyze({
  2. index: "analyze_sample",
  3. analyzer: "whitespace",
  4. text: "this is a test",
  5. });
  6. console.log(response);

Console

  1. GET /analyze_sample/_analyze
  2. {
  3. "analyzer" : "whitespace",
  4. "text" : "this is a test"
  5. }

Derive analyzer from a field mapping

アナライザーはフィールドマッピングに基づいて導出できます。例えば:

Python

  1. resp = client.indices.analyze(
  2. index="analyze_sample",
  3. field="obj1.field1",
  4. text="this is a test",
  5. )
  6. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. index: 'analyze_sample',
  3. body: {
  4. field: 'obj1.field1',
  5. text: 'this is a test'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.analyze({
  2. index: "analyze_sample",
  3. field: "obj1.field1",
  4. text: "this is a test",
  5. });
  6. console.log(response);

Console

  1. GET /analyze_sample/_analyze
  2. {
  3. "field" : "obj1.field1",
  4. "text" : "this is a test"
  5. }
  1. ### Normalizer
  2. `````normalizer`````は、`````analyze_sample`````インデックスに関連付けられたノーマライザーを持つキーワードフィールドに提供できます。
  3. #### Python
  4. ``````python
  5. resp = client.indices.analyze(
  6. index="analyze_sample",
  7. normalizer="my_normalizer",
  8. text="BaR",
  9. )
  10. print(resp)
  11. `

Ruby

  1. response = client.indices.analyze(
  2. index: 'analyze_sample',
  3. body: {
  4. normalizer: 'my_normalizer',
  5. text: 'BaR'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.analyze({
  2. index: "analyze_sample",
  3. normalizer: "my_normalizer",
  4. text: "BaR",
  5. });
  6. console.log(response);

Console

  1. GET /analyze_sample/_analyze
  2. {
  3. "normalizer" : "my_normalizer",
  4. "text" : "BaR"
  5. }

または、トークンフィルターと文字フィルターからカスタム一時ノーマライザーを構築することによって。

Python

  1. resp = client.indices.analyze(
  2. filter=[
  3. "lowercase"
  4. ],
  5. text="BaR",
  6. )
  7. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. filter: [
  4. 'lowercase'
  5. ],
  6. text: 'BaR'
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.analyze({
  2. filter: ["lowercase"],
  3. text: "BaR",
  4. });
  5. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "filter" : ["lowercase"],
  4. "text" : "BaR"
  5. }

Explain analyze

より詳細な情報を取得したい場合は、explaintrueに設定します(デフォルトはfalseです)。これにより、各トークンのすべてのトークン属性が出力されます。出力したいトークン属性をattributesオプションを設定することでフィルタリングできます。

追加の詳細情報の形式はLuceneで実験的とラベル付けされており、将来的に変更される可能性があります。

Python

  1. resp = client.indices.analyze(
  2. tokenizer="standard",
  3. filter=[
  4. "snowball"
  5. ],
  6. text="detailed output",
  7. explain=True,
  8. attributes=[
  9. "keyword"
  10. ],
  11. )
  12. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'standard',
  4. filter: [
  5. 'snowball'
  6. ],
  7. text: 'detailed output',
  8. explain: true,
  9. attributes: [
  10. 'keyword'
  11. ]
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "standard",
  3. filter: ["snowball"],
  4. text: "detailed output",
  5. explain: true,
  6. attributes: ["keyword"],
  7. });
  8. console.log(response);

Console

  1. GET /_analyze
  2. {
  3. "tokenizer" : "standard",
  4. "filter" : ["snowball"],
  5. "text" : "detailed output",
  6. "explain" : true,
  7. "attributes" : ["keyword"]
  8. }
“keyword”属性のみを出力するために”keyword”を設定します

リクエストは次の結果を返します:

Console-Result

  1. {
  2. "detail" : {
  3. "custom_analyzer" : true,
  4. "charfilters" : [ ],
  5. "tokenizer" : {
  6. "name" : "standard",
  7. "tokens" : [ {
  8. "token" : "detailed",
  9. "start_offset" : 0,
  10. "end_offset" : 8,
  11. "type" : "<ALPHANUM>",
  12. "position" : 0
  13. }, {
  14. "token" : "output",
  15. "start_offset" : 9,
  16. "end_offset" : 15,
  17. "type" : "<ALPHANUM>",
  18. "position" : 1
  19. } ]
  20. },
  21. "tokenfilters" : [ {
  22. "name" : "snowball",
  23. "tokens" : [ {
  24. "token" : "detail",
  25. "start_offset" : 0,
  26. "end_offset" : 8,
  27. "type" : "<ALPHANUM>",
  28. "position" : 0,
  29. "keyword" : false
  30. }, {
  31. "token" : "output",
  32. "start_offset" : 9,
  33. "end_offset" : 15,
  34. "type" : "<ALPHANUM>",
  35. "position" : 1,
  36. "keyword" : false
  37. } ]
  38. } ]
  39. }
  40. }
リクエストで”attributes”を指定したため、”keyword”属性のみを出力します。

Setting a token limit

過剰なトークンを生成すると、ノードがメモリ不足になる可能性があります。次の設定により、生成できるトークンの数を制限できます:

  • index.analyze.max_token_count
  • _analyze APIを使用して生成できるトークンの最大数。デフォルト値は10000です。この制限を超えるトークンが生成されると、エラーが発生します。指定されたインデックスがない_analyzeエンドポイントは、常に10000値を制限として使用します。この設定により、特定のインデックスの制限を制御できます:

Python

  1. resp = client.indices.create(
  2. index="analyze_sample",
  3. settings={
  4. "index.analyze.max_token_count": 20000
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'analyze_sample',
  3. body: {
  4. settings: {
  5. 'index.analyze.max_token_count' => 20_000
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.create({
  2. index: "analyze_sample",
  3. settings: {
  4. "index.analyze.max_token_count": 20000,
  5. },
  6. });
  7. console.log(response);

Console

  1. PUT /analyze_sample
  2. {
  3. "settings" : {
  4. "index.analyze.max_token_count" : 20000
  5. }
  6. }

Python

  1. resp = client.indices.analyze(
  2. index="analyze_sample",
  3. text="this is a test",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. index: 'analyze_sample',
  3. body: {
  4. text: 'this is a test'
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.analyze({
  2. index: "analyze_sample",
  3. text: "this is a test",
  4. });
  5. console.log(response);

Console

  1. GET /analyze_sample/_analyze
  2. {
  3. "text" : "this is a test"
  4. }