Language Analyzer не работает найти результаты в единственном числе - PullRequest
2 голосов
/ 06 апреля 2019

У меня есть несколько категорий с переводами в поле моей категории.Я определил языковые анализаторы для полей в моем индексе, чтобы я мог их искать.Но это не находит единственную версию моих слов.wasmachine в titles.title-nl - единственное число wasmachines, но не найдено.Чего мне не хватает?

Демонстрационный документ

    "_source" : {
      "google_id" : 2706,
      "titles" : [
        {
          "title-en" : "laundry appliances",
          "title-de" : "waschen & trocknen",
          "title-fr" : "appareils de blanchisserie",
          "title-nl" : "wasmachines"
        }
      ]
    }

Как я их отобразил

PUT categories/_mapping/category
{
"dynamic": false,
"properties": {
"titles.title-nl": {
"type": "text",
"analyzer": "dutch"
},
"titles.title-en": {
    "type": "text",
      "analyzer": "english"
    },
    "titles.title-de": {
    "type": "text",
      "analyzer": "german"
    },
    "titles.title-fr": {
    "type": "text",
      "analyzer": "french"
    }
  }
}

То, как я их ищу

GET categories/_search
{
  "size": 4, 
  "query": {
    "multi_match": {
      "query": "wasmachines",
      "fields": ["titles.title-de","titles.title-en", "titles.title-fr", "titles.title-nl"]
    }
  }
}

1 Ответ

2 голосов
/ 06 апреля 2019

Проблема в том, что по умолчанию голландский анализатор не знает, как поставить слово wasmachines, вам нужно будет заново создать индекс с помощью пользовательского анализатора, используя stemmer_override.

Глядя в эластичную документацию , вы можете сделать следующее, чтобы воссоздать dutch анализатор и сказать, что wasmachines следует поставить на wasmachine, просто поместите wasmachine => wasmachines в правилах для stemmer_override

PUT categories/
{
  "settings": {
    "analysis": {
      "filter": {
        "dutch_stop": {
          "type":       "stop",
          "stopwords":  "_dutch_" 
        },
        "dutch_keywords": {
          "type":       "keyword_marker",
          "keywords":   ["voorbeeld"] 
        },
        "dutch_stemmer": {
          "type":       "stemmer",
          "language":   "dutch"
        },
        "dutch_override": {
          "type":       "stemmer_override",
          "rules": [
            "fiets=>fiets",
            "bromfiets=>bromfiets",
            "wasmachine=>wasmachines",
            "ei=>eier",
            "kind=>kinder"
          ]
        }
      },
      "analyzer": {
        "rebuilt_dutch": {
          "tokenizer":  "standard",
          "filter": [
            "lowercase",
            "dutch_stop",
            "dutch_keywords",
            "dutch_override",
            "dutch_stemmer"
          ]
        }
      }
    }
  }
}

Вам также понадобится использовать этот новый анализатор в вашем отображении:

PUT categories/_mapping/category
{
    "dynamic": false,
    "properties": {
        "titles.title-nl": {
            "type": "text",
            "analyzer": "rebuilt_dutch"
        },
        "titles.title-en": {
            "type": "text",
            "analyzer": "english"
        },
        "titles.title-de": {
            "type": "text",
            "analyzer": "german"
        },
        "titles.title-fr": {
            "type": "text",
            "analyzer": "french"
        }
    } 
}

После этого вы сможете искать wasmachine и получать документы, которые имеют wasmachines.

...