Подстановочный запрос CloudSearch не работает с API 2013 после перехода с API 2011

Я недавно обновил экземпляр CloudSearch с 2011 года до API 2013 года. Оба экземпляра имеют поле с именем sid, которое представляет собой текстовое поле, содержащее двухбуквенный код, за которым следуют несколько цифр, например LC12345. С API 2011, если я запускаю поиск следующим образом:

q=12345*&return-fields=sid,name,desc

... я получаю 1 результат, и это здорово. Но результат результата LC12345 и так оно и было проиндексировано. Число 12345 больше нигде не отображается ни в одном из полей документа. Я не понимаю, почему это работает. Я могу только предположить, что этот тип запроса ищет любые термины в любых полях, которые даже содержат число 12345.

Причина, по которой я спрашиваю, заключается в том, что эта функция теперь нарушена, когда я выполняю запрос с использованием API 2013 Мне нужно использовать синтаксический анализатор структурированных запросов, но даже сопоставимый шаблонный запрос с использованием простого синтаксического анализатора не работает, например

q.parser=simple&q=12345*&return=sid,name,desc

... ничего не возвращает, хотя документ определенно есть, т.е. если я запрашиваю LC12345* он находит документ.

Если бы я мог понять, как заставить работать простой запрос, как это было раньше, это, по крайней мере, помогло бы мне начать делать то же самое со структурированным синтаксисом.

1 ответ

Решение

Почему не работает

CloudSearch v1 (2011) имел другой способ токенизации смешанных буквенно-цифровых строк. Вот логика, описанная в заархивированных документах (выделено мной).

Если строка содержит как буквенные, так и числовые символы и имеет длину не менее трех и не более девяти символов, буквенные и числовые части строки обрабатываются как отдельные токены. Например, строка DOC298 разбита на два термина: doc 298

Обработка текста в CloudSearch v2 (2013) следует текстовой сегментации Unicode, которая не определяет такое поведение:

Не разбивайте последовательности цифр или цифр рядом с буквами ("3a" или "A3").

Решение

Вы должны просто иметь возможность искать *12345 чтобы получить результаты с любым префиксом. Могут быть некоторые крайние случаи, такие как получение нежелательных результатов (вещи с более предыдущими цифрами, например, AB99912345); Я не знаю достаточно о ваших данных, чтобы сказать, являются ли это реальными проблемами.

Другой вариант - индексировать числовой префикс отдельно от алфавитного суффикса, но это дополнительная работа, которая может быть ненужной.

Я предполагаю, что вы используете Cloudsearch на английском языке, так что, возможно, это не ваша конкретная проблема, но также следите за стоп-словами в ваших поисковых запросах:

https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-analysis-schemes.html

В вашем примере слово "jo" является стоп-словом на датском и других языках, и, конечно же, поддерживаемые языки имеют словарь стоп-слов, в котором есть очень распространенные. Если вы не укажете язык в текстовом поле, это будет английский. Вы можете увидеть их здесь: https://docs.aws.amazon.com/cloudsearch/latest/developerguide/text-processing.html.

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