Поисковое предложение является важной частью поиска. При реализации поискового предложения обычно необходимо учитывать источник, сопоставление, сортировку, агрегирование, количество связанных документов и исправление орфографических ошибок предлагаемых слов.ElasticsearchРеализованы поисковые подсказки.
описание проблемы
Поиск на веб-сайтах электронной коммерции является одной из самых основных и важных функций.Хорошее взаимодействие с окном поиска может принести большую пользу электронной коммерции.Давайте сначала рассмотрим предложения по поиску на Taobao, JD.com и Amazon. .ком.
При вводе [Свитер] в поле поиска Taobao подсказки для поиска ниже включают предлагаемые слова и связанные теги:
Когда вы входите [Свитер] в поле поиска Jingdong, следующий поиск предполагает, что право отобразить количество рекомендуемого слова:
Когда вы вводите [Свитер] в поле поиска Amazon, верхняя часть предложения поиска может поддерживать поиск по определенной категории:
Из приведенного выше сравнения видно, что разные компании электронной коммерции немного по-разному акцентируют внимание на поисковых подсказках, но основные проблемы включают в себя:
- Сопоставление: сопоставление префиксов может быть выполнено с помощью пользовательского ввода;
- Сортировать: сортировать по приоритету предлагаемых слов;
- Агрегация: ее можно агрегировать в соответствии с продуктами, связанными с предлагаемыми словами, такими как классификация агрегации, метка агрегации и т. д.;
- Исправление ошибок: возможность исправлять орфографические ошибки пользовательского ввода;
Реализация поискового предложения
В нашей реализации поискового предложения мы в основном учитываем источник, соответствие, сортировку, количество связанных элементов и исправление орфографических ошибок предлагаемых слов.
SuggestionDiscovery
- SuggestionDiscovery отвечает за обнаружение предлагаемых слов;
- Источником предлагаемых слов может быть название категории продукта, название бренда, этикетка продукта, высокочастотные слова названия продукта, популярные поисковые слова или некоторые сочетания слов, такие как «категория + пол». и «категория + метка» или какие-то дополнительные слова;
- При сохранении слов рекомендуется учитывать дедупликацию, например, «Sweeter Men» и «Sweater Men» должны быть одинаковыми, а «Nike» и «nike» тоже должны быть одинаковыми;
- Поскольку источник предлагаемых слов обычно относительно стабилен, цикл выполнения может быть более продолжительным, например, раз в неделю;
SuggestionCounter
- SuggestionCounter отвечает за получение количества продуктов, связанных с предлагаемыми словами.При необходимости могут быть выполнены некоторые операции агрегации, такие как классификация агрегации и теги;
- При реализации SuggestionCounter, поскольку интерфейс поиска должен быть фактически вызван, следует максимально избегать влияния на поиск пользователей, например выполнять его рано утром и использовать однопоточный вызов;
- Чтобы повысить эффективность, многоуровневый интерфейс поиска ELasticsearch должен использоваться для выполнения количества партий, и в то же время, значение подсчета предложенных слов в базе данных должно быть обновлено в партиях;
- Поскольку SuggestionCounter является относительно ресурсоемким, его можно рассмотреть для увеличения периода выполнения, но это может привести к большой ошибке между значением счетчика и фактическим поиском, что необходимо учитывать в соответствии с реальной ситуацией;
SuggestionIndexRebuiler
- SuggestionIndexRebuiler отвечает за перестроение индекса;
- Учитывая поисковые привычки пользователя, можно использоватьMulti-fieldsчтобы добавить несколько анализаторов к предлагаемым словам. Например, для предлагаемого слова [Sweater Jacket] используйте несколько полей, чтобы добавить поле без слов, поле сегментации слова пиньинь, поле сегментации начального слова пиньинь и поле сегментации слова IK, чтобы предлагаемое слово можно было сопоставляется путем ввода [weiyi] и [накладные расходы];
- Когда индекс перестраивается, он добавляется к временному индексу пакетами посредством массового использования, а затем обновляется через псевдоним;
- Данные для овраги зависит от предложения Counter, поэтому его цикл выполнения должен соответствовать предложению;
SuggestionService
- INVENTIONERVICE - это класс услуг, который действительно в предложении поиска пользователей;
- Обычная реализация заключается в том, чтобы сначала обратиться к кешу, чтобы запросить, можно ли сопоставить кэшированную запись, и, если она может сопоставиться, она будет возвращена напрямую; в противном случае будет вызван Elasticsearch.Prefix QueryДля поиска, так как мы определили Multi-fields при перестроении индекса, мы должны использовать boolQuery для его обработки при поиске; если Elasticsearch возвращает непустые данные результата в это время, добавить их в кеш и вернуть;
POST /suggestion/_search
{
"from" : 0,
"size" : 10,
"query" : {
"bool" : {
"must" : {
"bool" : {
"should" : [ {
"prefix" : {
"keyword" : "卫衣"
}
}, {
"prefix" : {
"keyword.keyword_ik" : "卫衣"
}
}, {
"prefix" : {
"keyword.keyword_pinyin" : "卫衣"
}
}, {
"prefix" : {
"keyword.keyword_first_py" : "卫衣"
}
} ]
}
},
"filter" : {
"range" : {
"count" : {
"from" : 5,
"to" : null,
"include_lower" : true,
"include_upper" : true
}
}
}
}
},
"sort" : [ {
"weight" : {
"order" : "desc"
}
}, {
"count" : {
"order" : "desc"
}
} ]
}
- Если Elasticsearch возвращает пустые результаты, в это время следует добавить исправление орфографических ошибок (исправление орфографических ошибок также может быть внесено при вызове поиска Elasticsearch, но обычно у пользователя нет орфографических ошибок, поэтому рекомендуется вызывать его позже отдельно); если возвращенный подсказчик не пуст, предлагаемый словесный сервис будет вызван в соответствии с новым словом; например, если пользователь вводит [adidss], а результат, полученный при вызове подсказчика Elasticsearch, будет [adidas], то предложенный слово будет найдено в соответствии с adidas.
POST /suggestion/_search
{
"size" : 0,
"suggest" : {
"keyword_suggestion" : {
"text" : "adidss",
"term" : {
"field" : "keyword",
"size" : 1
}
}
}
}
- О сортировке: в нашей реализации мы сортируем по весу и количеству, а вес в настоящее время учитывает только тип предлагаемых слов (например, «Категория» > «Бренд» > «Ярлык»);
Достижение результатов и последующие улучшения
- С помощью приведенной выше реализации мы смогли реализовать относительно мощное слово подсказки для поиска Фактический эффект выглядит следующим образом:
- Последующие улучшения, которые можно рассмотреть: обратитесь к Amazon, чтобы увеличить агрегированное отображение категорий, повысить персонализированную обработку пользователей для поддержки лучшей сортировки предлагаемых слов и поддержки более эффективных рекомендуемых слов на основе истории поиска пользователя;