重複トークンフィルターの削除

同じ位置にある重複トークンを削除します。

remove_duplicates フィルターは、Lucene の RemoveDuplicatesTokenFilter を使用します。

remove_duplicates フィルターがどのように機能するかを見るには、まず同じ位置に重複トークンを含むトークンストリームを生成する必要があります。

次の analyze API リクエストは、keyword_repeatstemmer フィルターを使用して、jumping dog のためにステム化されたトークンと非ステム化されたトークンを作成します。

Python

  1. resp = client.indices.analyze(
  2. tokenizer="whitespace",
  3. filter=[
  4. "keyword_repeat",
  5. "stemmer"
  6. ],
  7. text="jumping dog",
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'whitespace',
  4. filter: [
  5. 'keyword_repeat',
  6. 'stemmer'
  7. ],
  8. text: 'jumping dog'
  9. }
  10. )
  11. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "whitespace",
  3. filter: ["keyword_repeat", "stemmer"],
  4. text: "jumping dog",
  5. });
  6. console.log(response);

コンソール

  1. GET _analyze
  2. {
  3. "tokenizer": "whitespace",
  4. "filter": [
  5. "keyword_repeat",
  6. "stemmer"
  7. ],
  8. "text": "jumping dog"
  9. }

API は次のレスポンスを返します。位置 1dog トークンが重複していることに注意してください。

コンソール-結果

  1. {
  2. "tokens": [
  3. {
  4. "token": "jumping",
  5. "start_offset": 0,
  6. "end_offset": 7,
  7. "type": "word",
  8. "position": 0
  9. },
  10. {
  11. "token": "jump",
  12. "start_offset": 0,
  13. "end_offset": 7,
  14. "type": "word",
  15. "position": 0
  16. },
  17. {
  18. "token": "dog",
  19. "start_offset": 8,
  20. "end_offset": 11,
  21. "type": "word",
  22. "position": 1
  23. },
  24. {
  25. "token": "dog",
  26. "start_offset": 8,
  27. "end_offset": 11,
  28. "type": "word",
  29. "position": 1
  30. }
  31. ]
  32. }

重複している dog トークンの1つを削除するには、前の analyze API リクエストに remove_duplicates フィルターを追加します。

Python

  1. resp = client.indices.analyze(
  2. tokenizer="whitespace",
  3. filter=[
  4. "keyword_repeat",
  5. "stemmer",
  6. "remove_duplicates"
  7. ],
  8. text="jumping dog",
  9. )
  10. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'whitespace',
  4. filter: [
  5. 'keyword_repeat',
  6. 'stemmer',
  7. 'remove_duplicates'
  8. ],
  9. text: 'jumping dog'
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "whitespace",
  3. filter: ["keyword_repeat", "stemmer", "remove_duplicates"],
  4. text: "jumping dog",
  5. });
  6. console.log(response);

コンソール

  1. GET _analyze
  2. {
  3. "tokenizer": "whitespace",
  4. "filter": [
  5. "keyword_repeat",
  6. "stemmer",
  7. "remove_duplicates"
  8. ],
  9. "text": "jumping dog"
  10. }

API は次のレスポンスを返します。位置 1dog トークンが1つだけになりました。

コンソール-結果

  1. {
  2. "tokens": [
  3. {
  4. "token": "jumping",
  5. "start_offset": 0,
  6. "end_offset": 7,
  7. "type": "word",
  8. "position": 0
  9. },
  10. {
  11. "token": "jump",
  12. "start_offset": 0,
  13. "end_offset": 7,
  14. "type": "word",
  15. "position": 0
  16. },
  17. {
  18. "token": "dog",
  19. "start_offset": 8,
  20. "end_offset": 11,
  21. "type": "word",
  22. "position": 1
  23. }
  24. ]
  25. }

アナライザーへの追加

次の create index API リクエストは、remove_duplicates フィルターを使用して新しい カスタムアナライザー を構成します。

このカスタムアナライザーは、keyword_repeatstemmer フィルターを使用して、ストリーム内の各トークンのステム化されたバージョンと非ステム化されたバージョンを作成します。remove_duplicates フィルターは、同じ位置にある重複トークンを削除します。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "tokenizer": "standard",
  8. "filter": [
  9. "keyword_repeat",
  10. "stemmer",
  11. "remove_duplicates"
  12. ]
  13. }
  14. }
  15. }
  16. },
  17. )
  18. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. my_custom_analyzer: {
  8. tokenizer: 'standard',
  9. filter: [
  10. 'keyword_repeat',
  11. 'stemmer',
  12. 'remove_duplicates'
  13. ]
  14. }
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. my_custom_analyzer: {
  7. tokenizer: "standard",
  8. filter: ["keyword_repeat", "stemmer", "remove_duplicates"],
  9. },
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);

コンソール

  1. PUT my-index-000001
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "tokenizer": "standard",
  8. "filter": [
  9. "keyword_repeat",
  10. "stemmer",
  11. "remove_duplicates"
  12. ]
  13. }
  14. }
  15. }
  16. }
  17. }