Настройка фонетического анализа Elasticsearch для использования Double Metaphone с другим языком (PT-BR)

У меня есть экземпляр Elasticsearch[6.2], и я пытаюсь использовать двойной метафон с другим языком. Я пробовал это, но это работало только с английскими словами.

Например, на португальском (pt-br) X и CH имеют одинаковый звук, поэтому при поиске в результатах должны быть указаны все документы, соответствующие обоим. Еще одна информация состоит в том, что искомое слово может быть найдено в любом поле документа и в любой части искомого поля.

Вот конфигурация и создание индекса:

PUT /docs
{
    "settings": {
    "analysis": {
        "analyzer": {
            "brazilian": {
                "tokenizer": "standard",
                "filter": [
                    "standard",
                    "my_ascii_folding",
                    "lowercase",
                    "brazilian_stemmer",
                    "brazilian_stop",
                    "dbl_metaphone"
                ]
            },
            "dbl_metaphone": {
              "tokenizer": "standard",
              "filter":    "dbl_metaphone" 
            }
        },
        "filter": {
            "my_ascii_folding": {
                "type": "asciifolding",
                "preserve_original": true
            },
            "brazilian_stemmer": {
              "type":       "stemmer",
              "language":   "brazilian"
            },
            "brazilian_stop": {
              "type":       "stop",
              "stopwords":  "_brazilian_" 
            },
            "dbl_metaphone": { 
              "type":    "phonetic",
              "encoder": "double_metaphone"
            }
        }

    }
  }
}

И вот, отображение для индекса создано:

PUT /docs/_mapping/content
{
 "properties": {
"id_documento": {
    "type": "long"
  },
"nome": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "descricao": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
  }
  },
  "id_tipo": {
  "type": "long"
  },
  "tipo": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "id_pasta": {
  "type": "long"
  },
  "permissao": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "permissao_pasta": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "bloqueado": {
  "type": "boolean"
  },
  "resumoIndice": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "id_caixa": {
    "type": "long"
  },
"nmcaixa": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "ocr": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "dirIndexTextual": {
    "type": "text",
    "fields": {
      "phonetic": { 
        "type":     "text",
        "index": true,
        "analyzer": "dbl_metaphone"
      }
    }
  },
  "maxCaracteresResumo": {
    "type": "integer"
  },
  "qtdeDocPag": {
    "type": "integer"
  },
  "qtdeDoc": {
    "type": "integer"
  }
}
}

И, например, способ поиска:

GET /docs/content/_search
{
 "query": {
    "multi_match": {
       "query": "Chimena",
       "operator": "and",
       "fields": ["nome.phonetic", "descricao.phonetic"]
    }
  }
}

Каков был бы лучший способ сделать это?

0 ответов

Другие вопросы по тегам