Как настроить токенизацию номеров с помощью анализатора en.microsoft? - PullRequest
1 голос
/ 13 марта 2019

В настоящее время мы используем анализаторы языка поиска Microsoft Azure по некоторым специальным языковым полям.В большинстве случаев он имеет большее значение, чем стандартные анализаторы языка Lucene.Но мы обнаружили проблему при проверке анализатора en.microsoft.

Проблема в том, что значение поля содержит цифры.Анализатор умен, чтобы разрешить избыточный «0» перед цифрой.

Например:

POST /analyze?api-version=2017-11-11
  {
    "text": "1",
    "analyzer": "en.microsoft"

  }

Ответ:

    "tokens": [
        {
            "token": "1",
            "startOffset": 0,
            "endOffset": 2,
            "position": 0
        },
        {
            "token": "nn1",
            "startOffset": 0,
            "endOffset": 2,
            "position": 0
        }
]

Проблема в том,что если значением поля является «01», то весь текст, такой как «01», «001», «0001»,… будет соответствовать этому полю.

У нас есть поле для сохранения имени / значения атрибута продуктапары, например, «бренд: Contoso | размер: 1».Тогда даже поиск «0001» может вернуть документ с этим значением поля.Это не то, что нам нужно.

Итак, мой вопрос, есть ли способ настроить анализатор en.microsoft, чтобы мы могли воспользоваться преимуществами мощного стеммера анализатора, но избежать автоматического «0”Отступ перед цифрой?

1 Ответ

1 голос
/ 15 марта 2019

К сожалению, вы не можете изменить способ, которым токенизаторы Microsoft нормализуют числа. Чтобы обойти это ограничение, вы можете выбрать другой анализатор для атрибутов продукта или добавить в конфигурацию анализатора фильтр символов, который кодирует числовые символы, чтобы токенизатор их игнорировал, например, сопоставить каждую цифру с символом вне ожидаемого набора символов, используя MappingCharFilter . Вы можете найти примеры здесь , используйте MicrosoftLanguageStemmingTokenizer в качестве токенизатора.

...