アナライザーの指定

Elasticsearchは、組み込みまたはカスタムアナライザーを指定するためのさまざまな方法を提供します:

シンプルに保つ

異なるレベルや異なる時間でアナライザーを指定する柔軟性は素晴らしいですが… 必要なときだけです。

ほとんどの場合、シンプルなアプローチが最適です:各 text フィールドにアナライザーを指定します。これは、フィールドのアナライザーを指定するで概説されています。

このアプローチは、Elasticsearchのデフォルトの動作とよく合い、インデックス作成と検索に同じアナライザーを使用できます。また、マッピング取得APIを使用して、どのアナライザーがどのフィールドに適用されるかをすぐに確認できます。

通常、インデックスのマッピングを作成しない場合は、インデックステンプレートを使用して同様の効果を得ることができます。

Elasticsearchがインデックスアナライザーを決定する方法

Elasticsearchは、次のパラメーターを順番にチェックすることによって、使用するインデックスアナライザーを決定します:

これらのパラメーターが指定されていない場合、standard アナライザーが使用されます。

フィールドのアナライザーを指定する

インデックスをマッピングする際に、analyzerマッピングパラメーターを使用して、各 text フィールドのアナライザーを指定できます。

次のインデックス作成APIリクエストは、whitespace アナライザーを title フィールドのアナライザーとして設定します。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "title": {
  6. "type": "text",
  7. "analyzer": "whitespace"
  8. }
  9. }
  10. },
  11. )
  12. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. title: {
  7. type: 'text',
  8. analyzer: 'whitespace'
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. title: {
  6. type: "text",
  7. analyzer: "whitespace",
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "title": {
  6. "type": "text",
  7. "analyzer": "whitespace"
  8. }
  9. }
  10. }
  11. }

インデックスのデフォルトアナライザーを指定する

フィールドレベルのアナライザーに加えて、analysis.analyzer.default 設定を使用してフォールバックアナライザーを設定できます。

次のインデックス作成APIリクエストは、simple アナライザーを my-index-000001 のフォールバックアナライザーとして設定します。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "default": {
  7. "type": "simple"
  8. }
  9. }
  10. }
  11. },
  12. )
  13. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. default: {
  8. type: 'simple'
  9. }
  10. }
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. default: {
  7. type: "simple",
  8. },
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "default": {
  7. "type": "simple"
  8. }
  9. }
  10. }
  11. }
  12. }

Elasticsearchが検索アナライザーを決定する方法

ほとんどの場合、異なる検索アナライザーを指定する必要はありません。そうすることで、関連性に悪影響を及ぼし、予期しない検索結果が得られる可能性があります。

別の検索アナライザーを指定することを選択した場合は、運用環境に展開する前に、分析設定を徹底的にテストすることをお勧めします

検索時に、Elasticsearchは次のパラメーターを順番にチェックして、使用するアナライザーを決定します:

これらのパラメーターが指定されていない場合、standard アナライザーが使用されます。

クエリの検索アナライザーを指定する

analyzerを使用して、フルテキストクエリを記述する際に、検索アナライザーを指定できます。指定された場合、これは他の検索アナライザーを上書きします。

次の検索APIリクエストは、[stop] アナライザーをmatchクエリの検索アナライザーとして設定します。

Python

  1. resp = client.search(
  2. index="my-index-000001",
  3. query={
  4. "match": {
  5. "message": {
  6. "query": "Quick foxes",
  7. "analyzer": "stop"
  8. }
  9. }
  10. },
  11. )
  12. print(resp)

Ruby

  1. response = client.search(
  2. index: 'my-index-000001',
  3. body: {
  4. query: {
  5. match: {
  6. message: {
  7. query: 'Quick foxes',
  8. analyzer: 'stop'
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.search({
  2. index: "my-index-000001",
  3. query: {
  4. match: {
  5. message: {
  6. query: "Quick foxes",
  7. analyzer: "stop",
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);

Console

  1. GET my-index-000001/_search
  2. {
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "Quick foxes",
  7. "analyzer": "stop"
  8. }
  9. }
  10. }
  11. }

フィールドの検索アナライザーを指定する

インデックスをマッピングする際に、search_analyzerマッピングパラメーターを使用して、各 text フィールドの検索アナライザーを指定できます。

検索アナライザーが提供される場合、インデックスアナライザーもanalyzerパラメーターを使用して指定する必要があります。

次のインデックス作成APIリクエストは、simple アナライザーを title フィールドの検索アナライザーとして設定します。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "title": {
  6. "type": "text",
  7. "analyzer": "whitespace",
  8. "search_analyzer": "simple"
  9. }
  10. }
  11. },
  12. )
  13. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. title: {
  7. type: 'text',
  8. analyzer: 'whitespace',
  9. search_analyzer: 'simple'
  10. }
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. title: {
  6. type: "text",
  7. analyzer: "whitespace",
  8. search_analyzer: "simple",
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "title": {
  6. "type": "text",
  7. "analyzer": "whitespace",
  8. "search_analyzer": "simple"
  9. }
  10. }
  11. }
  12. }

インデックスのデフォルト検索アナライザーを指定する

インデックスを作成する際に、analysis.analyzer.default_search 設定を使用してデフォルトの検索アナライザーを設定できます。

検索アナライザーが提供される場合、デフォルトのインデックスアナライザーもanalysis.analyzer.default設定を使用して指定する必要があります。

次のインデックス作成APIリクエストは、whitespace アナライザーを my-index-000001 インデックスのデフォルト検索アナライザーとして設定します。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "default": {
  7. "type": "simple"
  8. },
  9. "default_search": {
  10. "type": "whitespace"
  11. }
  12. }
  13. }
  14. },
  15. )
  16. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. default: {
  8. type: 'simple'
  9. },
  10. default_search: {
  11. type: 'whitespace'
  12. }
  13. }
  14. }
  15. }
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. default: {
  7. type: "simple",
  8. },
  9. default_search: {
  10. type: "whitespace",
  11. },
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "default": {
  7. "type": "simple"
  8. },
  9. "default_search": {
  10. "type": "whitespace"
  11. }
  12. }
  13. }
  14. }
  15. }