analyzer

のみ text フィールドは analyzer マッピングパラメータをサポートします。

analyzer パラメータは、text フィールドのインデックス作成または検索時に使用される analyzer を指定します。

update mapping API マッピングパラメータでオーバーライドされない限り、このアナライザーは index and search analysis の両方に使用されます。 Specify an analyzer を参照してください。

本番環境で使用する前にアナライザーをテストすることをお勧めします。 Test an analyzer を参照してください。

analyzer 設定は、既存のフィールドで update mapping API を使用して更新することはできません。

search_quote_analyzer

search_quote_analyzer 設定を使用すると、フレーズ用のアナライザーを指定できます。これは、フレーズクエリのストップワードを無効にする際に特に便利です。

フレーズのストップワードを無効にするには、次の3つのアナライザー設定を利用するフィールドが必要です:

  • 1. ストップワードを含むすべての用語をインデックス作成するための analyzer 設定
  • 2. ストップワードを削除する非フレーズクエリ用の search_analyzer 設定
  • 3. ストップワードを削除しないフレーズクエリ用の search_quote_analyzer 設定

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "my_analyzer": {
  7. "type": "custom",
  8. "tokenizer": "standard",
  9. "filter": [
  10. "lowercase"
  11. ]
  12. },
  13. "my_stop_analyzer": {
  14. "type": "custom",
  15. "tokenizer": "standard",
  16. "filter": [
  17. "lowercase",
  18. "english_stop"
  19. ]
  20. }
  21. },
  22. "filter": {
  23. "english_stop": {
  24. "type": "stop",
  25. "stopwords": "_english_"
  26. }
  27. }
  28. }
  29. },
  30. mappings={
  31. "properties": {
  32. "title": {
  33. "type": "text",
  34. "analyzer": "my_analyzer",
  35. "search_analyzer": "my_stop_analyzer",
  36. "search_quote_analyzer": "my_analyzer"
  37. }
  38. }
  39. },
  40. )
  41. print(resp)
  42. resp1 = client.index(
  43. index="my-index-000001",
  44. id="1",
  45. document={
  46. "title": "The Quick Brown Fox"
  47. },
  48. )
  49. print(resp1)
  50. resp2 = client.index(
  51. index="my-index-000001",
  52. id="2",
  53. document={
  54. "title": "A Quick Brown Fox"
  55. },
  56. )
  57. print(resp2)
  58. resp3 = client.search(
  59. index="my-index-000001",
  60. query={
  61. "query_string": {
  62. "query": "\"the quick brown fox\""
  63. }
  64. },
  65. )
  66. print(resp3)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. my_analyzer: {
  8. type: 'custom',
  9. tokenizer: 'standard',
  10. filter: [
  11. 'lowercase'
  12. ]
  13. },
  14. my_stop_analyzer: {
  15. type: 'custom',
  16. tokenizer: 'standard',
  17. filter: [
  18. 'lowercase',
  19. 'english_stop'
  20. ]
  21. }
  22. },
  23. filter: {
  24. english_stop: {
  25. type: 'stop',
  26. stopwords: '_english_'
  27. }
  28. }
  29. }
  30. },
  31. mappings: {
  32. properties: {
  33. title: {
  34. type: 'text',
  35. analyzer: 'my_analyzer',
  36. search_analyzer: 'my_stop_analyzer',
  37. search_quote_analyzer: 'my_analyzer'
  38. }
  39. }
  40. }
  41. }
  42. )
  43. puts response
  44. response = client.index(
  45. index: 'my-index-000001',
  46. id: 1,
  47. body: {
  48. title: 'The Quick Brown Fox'
  49. }
  50. )
  51. puts response
  52. response = client.index(
  53. index: 'my-index-000001',
  54. id: 2,
  55. body: {
  56. title: 'A Quick Brown Fox'
  57. }
  58. )
  59. puts response
  60. response = client.search(
  61. index: 'my-index-000001',
  62. body: {
  63. query: {
  64. query_string: {
  65. query: '"the quick brown fox"'
  66. }
  67. }
  68. }
  69. )
  70. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. my_analyzer: {
  7. type: "custom",
  8. tokenizer: "standard",
  9. filter: ["lowercase"],
  10. },
  11. my_stop_analyzer: {
  12. type: "custom",
  13. tokenizer: "standard",
  14. filter: ["lowercase", "english_stop"],
  15. },
  16. },
  17. filter: {
  18. english_stop: {
  19. type: "stop",
  20. stopwords: "_english_",
  21. },
  22. },
  23. },
  24. },
  25. mappings: {
  26. properties: {
  27. title: {
  28. type: "text",
  29. analyzer: "my_analyzer",
  30. search_analyzer: "my_stop_analyzer",
  31. search_quote_analyzer: "my_analyzer",
  32. },
  33. },
  34. },
  35. });
  36. console.log(response);
  37. const response1 = await client.index({
  38. index: "my-index-000001",
  39. id: 1,
  40. document: {
  41. title: "The Quick Brown Fox",
  42. },
  43. });
  44. console.log(response1);
  45. const response2 = await client.index({
  46. index: "my-index-000001",
  47. id: 2,
  48. document: {
  49. title: "A Quick Brown Fox",
  50. },
  51. });
  52. console.log(response2);
  53. const response3 = await client.search({
  54. index: "my-index-000001",
  55. query: {
  56. query_string: {
  57. query: '"the quick brown fox"',
  58. },
  59. },
  60. });
  61. console.log(response3);

Console

  1. PUT my-index-000001
  2. {
  3. "settings":{
  4. "analysis":{
  5. "analyzer":{
  6. "my_analyzer":{
  7. "type":"custom",
  8. "tokenizer":"standard",
  9. "filter":[
  10. "lowercase"
  11. ]
  12. },
  13. "my_stop_analyzer":{
  14. "type":"custom",
  15. "tokenizer":"standard",
  16. "filter":[
  17. "lowercase",
  18. "english_stop"
  19. ]
  20. }
  21. },
  22. "filter":{
  23. "english_stop":{
  24. "type":"stop",
  25. "stopwords":"_english_"
  26. }
  27. }
  28. }
  29. },
  30. "mappings":{
  31. "properties":{
  32. "title": {
  33. "type":"text",
  34. "analyzer":"my_analyzer",
  35. "search_analyzer":"my_stop_analyzer",
  36. "search_quote_analyzer":"my_analyzer"
  37. }
  38. }
  39. }
  40. }
  41. PUT my-index-000001/_doc/1
  42. {
  43. "title":"The Quick Brown Fox"
  44. }
  45. PUT my-index-000001/_doc/2
  46. {
  47. "title":"A Quick Brown Fox"
  48. }
  49. GET my-index-000001/_search
  50. {
  51. "query":{
  52. "query_string":{
  53. "query":"\"the quick brown fox\""
  54. }
  55. }
  56. }

search_quote_analyzer 設定は、update mapping API を使用して既存のフィールドで更新できます。

my_analyzer アナライザーは、ストップワードを含むすべての用語をトークン化します
my_stop_analyzer アナライザーは、ストップワードを削除します
analyzer 設定は、インデックス作成時に使用される my_analyzer アナライザーを指します
search_analyzer 設定は、非フレーズクエリのストップワードを削除する my_stop_analyzer を指します
search_quote_analyzer 設定は、フレーズクエリからストップワードが削除されないことを保証する my_analyzer アナライザーを指します
クエリが引用符で囲まれているため、フレーズクエリとして検出され、search_quote_analyzer が作動し、ストップワードがクエリから削除されないことを保証します。 my_analyzer アナライザーは次のトークンを返します [the, quick, brown, fox] これにより、ドキュメントの1つに一致します。
同時に、用語クエリは my_stop_analyzer アナライザーで分析され、ストップワードがフィルタリングされます。 したがって、The quick brown fox または A quick brown fox のいずれかを検索すると、両方のドキュメントが返されます。なぜなら、両方のドキュメントには次のトークンが含まれているからです [quick, brown, fox]。
search_quote_analyzer がなければ、フレーズクエリの正確な一致を行うことはできません。なぜなら、フレーズクエリのストップワードが削除され、両方のドキュメントが一致することになるからです。