条件トークンフィルター

指定された述語スクリプトの条件に一致するトークンにトークンフィルターのセットを適用します。

このフィルターはLuceneのConditionalTokenFilterを使用します。

次のanalyze APIリクエストは、conditionフィルターを使用して、THE QUICK BROWN FOX内の5文字未満のトークンに一致させます。その後、一致したトークンに対してlowercaseフィルターを適用し、小文字に変換します。

Python

  1. resp = client.indices.analyze(
  2. tokenizer="standard",
  3. filter=[
  4. {
  5. "type": "condition",
  6. "filter": [
  7. "lowercase"
  8. ],
  9. "script": {
  10. "source": "token.getTerm().length() < 5"
  11. }
  12. }
  13. ],
  14. text="THE QUICK BROWN FOX",
  15. )
  16. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'standard',
  4. filter: [
  5. {
  6. type: 'condition',
  7. filter: [
  8. 'lowercase'
  9. ],
  10. script: {
  11. source: 'token.getTerm().length() < 5'
  12. }
  13. }
  14. ],
  15. text: 'THE QUICK BROWN FOX'
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "standard",
  3. filter: [
  4. {
  5. type: "condition",
  6. filter: ["lowercase"],
  7. script: {
  8. source: "token.getTerm().length() < 5",
  9. },
  10. },
  11. ],
  12. text: "THE QUICK BROWN FOX",
  13. });
  14. console.log(response);

コンソール

  1. GET /_analyze
  2. {
  3. "tokenizer": "standard",
  4. "filter": [
  5. {
  6. "type": "condition",
  7. "filter": [ "lowercase" ],
  8. "script": {
  9. "source": "token.getTerm().length() < 5"
  10. }
  11. }
  12. ],
  13. "text": "THE QUICK BROWN FOX"
  14. }

フィルターは次のトークンを生成します:

テキスト

  1. [ the, QUICK, BROWN, fox ]

設定可能なパラメーター

  • filter
  • (必須、トークンフィルターの配列) トークンフィルターの配列。トークンがscriptパラメーターの述語スクリプトに一致する場合、これらのフィルターが提供された順序でトークンに適用されます。
    これらのフィルターには、インデックスマッピングで定義されたカスタムトークンフィルターを含めることができます。
  • script
  • (必須、スクリプトオブジェクト) トークンフィルターを適用するために使用される述語スクリプト。このスクリプトにトークンが一致する場合、filterパラメーターのフィルターがトークンに適用されます。
    有効なパラメーターについては、スクリプトの書き方を参照してください。インラインスクリプトのみがサポートされています。Painlessスクリプトは分析述語コンテキストで実行され、tokenプロパティが必要です。

アナライザーのカスタマイズと追加

  1. たとえば、次の[create index API](/read/elasticsearch-8-15/b5c127aabf881d48.md)リクエストは、カスタム`````condition`````フィルターを使用して新しい[カスタムアナライザー](/read/elasticsearch-8-15/f8c7123dddb484d0.md)を構成します。カスタム`````condition`````フィルターは、ストリーム内の最初のトークンに一致します。その後、一致したトークンを[`````reverse`````](/read/elasticsearch-8-15/26f0257a736bae76.md)フィルターを使用して反転させます。
  2. #### Python
  3. ``````python
  4. resp = client.indices.create(
  5. index="palindrome_list",
  6. settings={
  7. "analysis": {
  8. "analyzer": {
  9. "whitespace_reverse_first_token": {
  10. "tokenizer": "whitespace",
  11. "filter": [
  12. "reverse_first_token"
  13. ]
  14. }
  15. },
  16. "filter": {
  17. "reverse_first_token": {
  18. "type": "condition",
  19. "filter": [
  20. "reverse"
  21. ],
  22. "script": {
  23. "source": "token.getPosition() === 0"
  24. }
  25. }
  26. }
  27. }
  28. },
  29. )
  30. print(resp)
  31. `

Ruby

  1. response = client.indices.create(
  2. index: 'palindrome_list',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. whitespace_reverse_first_token: {
  8. tokenizer: 'whitespace',
  9. filter: [
  10. 'reverse_first_token'
  11. ]
  12. }
  13. },
  14. filter: {
  15. reverse_first_token: {
  16. type: 'condition',
  17. filter: [
  18. 'reverse'
  19. ],
  20. script: {
  21. source: 'token.getPosition() === 0'
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. )
  29. puts response

Js

  1. const response = await client.indices.create({
  2. index: "palindrome_list",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. whitespace_reverse_first_token: {
  7. tokenizer: "whitespace",
  8. filter: ["reverse_first_token"],
  9. },
  10. },
  11. filter: {
  12. reverse_first_token: {
  13. type: "condition",
  14. filter: ["reverse"],
  15. script: {
  16. source: "token.getPosition() === 0",
  17. },
  18. },
  19. },
  20. },
  21. },
  22. });
  23. console.log(response);

コンソール

  1. PUT /palindrome_list
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "whitespace_reverse_first_token": {
  7. "tokenizer": "whitespace",
  8. "filter": [ "reverse_first_token" ]
  9. }
  10. },
  11. "filter": {
  12. "reverse_first_token": {
  13. "type": "condition",
  14. "filter": [ "reverse" ],
  15. "script": {
  16. "source": "token.getPosition() === 0"
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }