Elasticsearch - Найти документ по термину, который является только частью данной строки запроса - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблема с поиском вasticsearch, и я надеюсь, что вы можете помочь.

Я хочу найти документ, имеющий ключевое слово, только нижний регистр которого анализатор анализирует.Когда сгенерированный термин является частью искомого запроса, я хочу, чтобы Elasticsearch нашел его.

Пример поиска:

 "query": {
    "match": {
      "categoryNames": "CD&DVD Aufbewahrung schwarz"
    }
  }

Документ, который я хочу найти:

"_source": {
    "categoryId": 11972638,
    "categoryNames": [
        "DVD-Koffer",
        "CD-Koffer",
        "CD-Aufbewahrung",
        "DVD-Aufbwahrung",
        "DVD-Ordner",
        "EDV-DVD-Aufbewahrung",
        "EDV-CD-Aufbewahrung",
        "CD&DVD Aufbewahrung",
        "Multimediabox"
    ],
    "lvl3Id": 11972638
}

Анализатор индекса:

"analysis" : {
    "analyzer" : {
        "default" : {
             "type": "custom",
             "tokenizer": "keyword",
             "filter" : ["lowercase"]
         }
      }
 }

Tervevector документа, который я хочу найти:

"cd&dvd aufbewahrung": {
    "term_freq": 1,
    "tokens": [
      ...
    ]
},
"cd-aufbewahrung": {
     "term_freq": 1,
     "tokens": [
       ...
      ]
},
"cd-koffer": {
      "term_freq": 1,
      "tokens": [
        ...
       ]
},
....

У меня нет результата.Когда я только ищу «CD & DVD aufbewahrung», я нахожу документ.

Я думаю, чтоasticsearch пытается найти термин «CD & DVD Aufbewahrung schwarz», который не существует, вместо сопоставления«CD & DVD Aufbewahrung» и игнорируйте «schwarz».

При поиске нельзя использовать стандартный анализатор, поскольку важно, чтобы только «CD & DVD Aufbewahrung» находил «CD & DVD Aufbewahrung», а не, например, термин, содержащий только «Aufbewahrung»"или" Aufbewahrung CD & DVD ", который будет найден, когда термин будет проанализирован, например, через пробелы.

Несколько примеров поиска с моими ожиданиями для документа выше:

CD&DVD Aufbewahrung -> Found
CD&DVD aufbewahrung -> Found
schwarz CD&DVD Aufbewahrung -> Found
CD&DVD Aufbewahrung gelb -> Found
schwarz CD&DVD Aufbewahrung gelb -> Found
CD&DVD schwarz Aufbewahrung -> not Found
Aufbewahrung CD&DVD -> not Found
schwarz CD & DVD Aufbewahrung -> not Found
schwarzCD&DVD Aufbewahrung -> Not Found

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 21 ноября 2018

Может быть, здесь будет полезен пользовательский анализатор с Shingle Token Filter .Пожалуйста, смотрите код ниже:

Отображение

PUT /so53412408
{
  "settings": {
    "analysis": {
      "analyzer": {
        "lowercase_keyword": {
          "tokenizer": "keyword",
          "filter": [
            "lowercase"
          ]
        },
        "lowercase_shingle": {
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "my_shingle"
          ]
        }
      },
      "filter": {
        "my_shingle": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 4
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "categoryNames": {
          "type": "text",
          "analyzer": "lowercase_keyword",
          "search_analyzer": "lowercase_shingle"
        }
      }
    }
  }
}

Пример данных

POST /so53412408/_doc
{
  "categoryNames": [
    "DVD-Koffer",
    "CD-Koffer",
    "CD-Aufbewahrung",
    "DVD-Aufbwahrung",
    "DVD-Ordner",
    "EDV-DVD-Aufbewahrung",
    "EDV-CD-Aufbewahrung",
    "CD&DVD Aufbewahrung",
    "Multimediabox"
  ]
}

Поисковый запрос

GET /so53412408/_search
{
  "query": {
    "match": {
      "categoryNames": "schwarzCD&DVD Aufbewahrung"
    }
  }
}

Результаты

CD&DVD Aufbewahrung              -> Found
CD&DVD aufbewahrung              -> Found
schwarz CD&DVD Aufbewahrung      -> Found
CD&DVD Aufbewahrung gelb         -> Found
schwarz CD&DVD Aufbewahrung gelb -> Found
CD&DVD schwarz Aufbewahrung      -> Not Found
Aufbewahrung CD&DVD              -> Not Found
schwarz CD & DVD Aufbewahrung    -> Not Found
schwarzCD&DVD Aufbewahrung       -> Not Found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...