マルチプレクサトークンフィルター

タイプ multiplexer のトークンフィルターは、同じ位置で複数のトークンを出力します。各トークンのバージョンは異なるフィルターを通過しています。同じ位置にある同一の出力トークンは削除されます。

受信トークンストリームに重複トークンがある場合、これらもマルチプレクサによって削除されます。

オプション

filters 受信トークンに適用するトークンフィルターのリストです。これらはインデックスマッピングの他の場所で定義された任意のトークンフィルターである可能性があります。フィルターはカンマ区切りの文字列を使用して連結できるため、例えば "lowercase, porter_stem"lowercase フィルターを適用し、その後 porter_stem フィルターを単一のトークンに適用します。

Shingle またはマルチワード同義語トークンフィルターは、内部で先読みを行うため、フィルター配列に宣言されると正常に機能しません。これはマルチプレクサによってサポートされていません。

  • preserve_original
  • true(デフォルト)の場合、フィルターされたトークンに加えて元のトークンを出力します。

設定例

次のように設定できます:

Python

  1. resp = client.indices.create(
  2. index="multiplexer_example",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "my_analyzer": {
  7. "tokenizer": "standard",
  8. "filter": [
  9. "my_multiplexer"
  10. ]
  11. }
  12. },
  13. "filter": {
  14. "my_multiplexer": {
  15. "type": "multiplexer",
  16. "filters": [
  17. "lowercase",
  18. "lowercase, porter_stem"
  19. ]
  20. }
  21. }
  22. }
  23. },
  24. )
  25. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'multiplexer_example',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. my_analyzer: {
  8. tokenizer: 'standard',
  9. filter: [
  10. 'my_multiplexer'
  11. ]
  12. }
  13. },
  14. filter: {
  15. my_multiplexer: {
  16. type: 'multiplexer',
  17. filters: [
  18. 'lowercase',
  19. 'lowercase, porter_stem'
  20. ]
  21. }
  22. }
  23. }
  24. }
  25. }
  26. )
  27. puts response

Js

  1. const response = await client.indices.create({
  2. index: "multiplexer_example",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. my_analyzer: {
  7. tokenizer: "standard",
  8. filter: ["my_multiplexer"],
  9. },
  10. },
  11. filter: {
  12. my_multiplexer: {
  13. type: "multiplexer",
  14. filters: ["lowercase", "lowercase, porter_stem"],
  15. },
  16. },
  17. },
  18. },
  19. });
  20. console.log(response);

コンソール

  1. PUT /multiplexer_example
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_analyzer": {
  7. "tokenizer": "standard",
  8. "filter": [ "my_multiplexer" ]
  9. }
  10. },
  11. "filter": {
  12. "my_multiplexer": {
  13. "type": "multiplexer",
  14. "filters": [ "lowercase", "lowercase, porter_stem" ]
  15. }
  16. }
  17. }
  18. }
  19. }

次のようにテストします:

Python

  1. resp = client.indices.analyze(
  2. index="multiplexer_example",
  3. analyzer="my_analyzer",
  4. text="Going HOME",
  5. )
  6. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. index: 'multiplexer_example',
  3. body: {
  4. analyzer: 'my_analyzer',
  5. text: 'Going HOME'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.analyze({
  2. index: "multiplexer_example",
  3. analyzer: "my_analyzer",
  4. text: "Going HOME",
  5. });
  6. console.log(response);

コンソール

  1. POST /multiplexer_example/_analyze
  2. {
  3. "analyzer" : "my_analyzer",
  4. "text" : "Going HOME"
  5. }

そして、次のように応答します:

コンソール結果

  1. {
  2. "tokens": [
  3. {
  4. "token": "Going",
  5. "start_offset": 0,
  6. "end_offset": 5,
  7. "type": "<ALPHANUM>",
  8. "position": 0
  9. },
  10. {
  11. "token": "going",
  12. "start_offset": 0,
  13. "end_offset": 5,
  14. "type": "<ALPHANUM>",
  15. "position": 0
  16. },
  17. {
  18. "token": "go",
  19. "start_offset": 0,
  20. "end_offset": 5,
  21. "type": "<ALPHANUM>",
  22. "position": 0
  23. },
  24. {
  25. "token": "HOME",
  26. "start_offset": 6,
  27. "end_offset": 10,
  28. "type": "<ALPHANUM>",
  29. "position": 1
  30. },
  31. {
  32. "token": "home",
  33. "start_offset": 6,
  34. "end_offset": 10,
  35. "type": "<ALPHANUM>",
  36. "position": 1
  37. }
  38. ]
  39. }
ステマーは位置1でトークン home も出力しましたが、これはこのトークンの重複であるため、トークンストリームから削除されました。

同義語フィルターと同義語グラフフィルターは、前の分析チェーンを使用して同義語リストを解析および分析し、そのチェーンに同じ位置で複数のトークンを生成するトークンフィルターが含まれている場合、例外をスローします。マルチプレクサを含むトークンストリームに同義語を適用したい場合は、同義語フィルターを各関連するマルチプレクサフィルターリストに追加する必要があります。メインのトークンチェーン定義の後に配置するのではなく。