Как реализовать пользовательскую проверку орфографии в API поиска GAE
В моем приложении python GAE я разрешаю пользователям запрашивать элементы, используя API поиска, где я изначально помещаю в документы точные теги, но попадания не так уж и значительны с учетом исправления заклинания, которое должно присутствовать. Я нашел способ реализации символьных диаграмм через хранилище данных, поскольку это гарантирует, что пользователь вводит по крайней мере часть слова правильно. В хранилище данных это занимает много времени. Например,
"hello"
(разбито на) ["hello", "ello", "hell", "hel", "elo", "llo", "he", "el", "ll", "lo"]
и когда я ищу "helo"
tags -["hel", "elo", "he", "el", "lo"]
(дайте положительный матч)
Я ранжирую их в соответствии с длиной тегов, соответствующих слову.
В Datastore я должен индексировать эти символы прерывания отдельно вместе с соответствующими им объектами. И для каждого слова выполните поиск по каждому тегу аналогичным образом. Что занимает много времени.
Есть ли способ добиться аналогичной операции с помощью поиска API. MatchScore просматривает несколько полей "ИЛИ"? Поиск способов разработки поисковых документов и выполнения нескольких исправленных заклинаниями запросов за минимальные операции.
Если у меня есть несколько полей для языков в каждом документе, например, например,
([tags - "hello world"] [rank - 2300] [partial tags - "hel", "ell", "llo", "wor", "orl", "rld", "hell", "ello", "worl", "orld"] [english - 1] [Spanish - 0] [French - 0] [German - 0]
Могу ли я выполнить операцию MatchScore вместе с сортировкой по языковым полям? (каждый документ связан только с одним языком)
1 ответ
API поиска является хорошим сервисом для этого и гораздо лучше подходит, чем хранилище данных. Если в ваших поисковых документах задан правильный язык, API поиска будет охватывать определенные языковые варианты (например, единственное / множественное число). Но API поиска работает только для слов (обычно разделенных пробелами, дефисами, точками и т. Д.).
ОБНОВЛЕНИЕ: Язык определяется либо в language
свойство поля или в language
свойство всего документа. В любом случае значение представляет собой двухбуквенный код языка ISO 693-1, например 'de'
для немецкого.
Для токенизации поисковых терминов ("hel", "elo",...) вы можете использовать шаблон из этого ответа: /questions/43243058/api-poiska-gae-s-chastichnyim-sootvetstviem/43243066#43243066 Также см. Мой комментарий к этому ответу. Если вы хотите использовать минимальную длину токенов (например, только 3+ буквы), чтобы избежать размера хранилища и времени экземпляра внешнего интерфейса, вы можете использовать код, который я там связал.
MatchScorer помогает оценить частоту использования данного термина в документе. Поскольку теги обычно встречаются только один раз для каждого документа, это не поможет вам в этом. Но, например, если ваш поиск связан с поиском в исследовательских работах термина "сгорание", MatchScorer ранжирует результаты, показывая сначала статьи, в которых этот термин включен чаще всего.
Фасетный поиск добавит так называемые фасеты к результату вашего поискового запроса, то есть (по умолчанию) будут возвращены также 10 наиболее часто встречающихся фасетов для текущего запроса. Это полезно с тегами или категориями, поэтому пользователи могут углубиться в поиск, применив любой из этих предложенных фильтров.
Если вы хотите предложить пользователям правильный термин для поиска, возможно, имеет смысл использовать два индекса. Один индекс, основной индекс для ваших фактических документов поиска (например, описания продуктов с тегами), и второй индекс только для тегов или категорий (токенизированные и, в конечном итоге, с синонимами). Если ваш пользователь вводит в поле поиска, ваше приложение сначала запрашивает индекс тега, предлагая соответствующие теги. Если пользователь выбирает один из них, тег используется для запроса первичного поискового индекса. Это поможет пользователям подобрать правильные теги.
Конечно, этими тегами можно управлять в хранилище данных, включая их синонимы, если есть люди, которые поддерживают такие списки. И каждый раз, когда тег сохраняется, ваше приложение обновляет соответствующий поисковый документ (во вторичном указателе), включая все символы (токены).