Мы переключаемся с поиска в спящем режиме (lucene) наasticsearch. Все продукты хранятся в эластичном поиске со следующими полями:
name,description,articleNr, ean, herstellerNr, hersteller, price
. Предположим, мы должны хранить следующие продукты: (например, только: имя, цена, артикул)
Rückenschild Karton kurz/br ws 10St für Ordner 1010 2.08 2572373
Ordner 101050, PP A4 RB 80mm grau 180° Ordner Präzisionsmechanik 3.39 2572374
Ordner 101050, PP A4 RB 80mm hellblau 180° Ordner Präzisionsmechanik 3.39 2572375
Ordner 101050, PP A4 RB 80mm hellgrün 180° Ordner Präzisionsmechanik 3.39 2572376
Ordner 101050, PP A4 RB 80mm hellrot 180° Ordner Präzisionsmechanik 3.39
HERMA Special - Papier - matt - permanent selbstklebend - beschichtet - weiß - 61 x 297 mm - 90 g/m² - 75 Etikett(en) (25 Bogen x 3) 8.68 2559675
HERMA Special - Papier - matt - permanent selbstklebend - beschichtet - weiß - 38 x 297 mm - 90 g/m² - 125 Etikett(en) (25 Bogen x 5) 8.68 2568156
Ablageschachtel 15cm, grau. Zur Langzeitlagerung von Hängemappen, 1.62 2568157
Ablageschachtel 20cm, grau. Zur Langzeitlagerung von Hängemappen, 1.93 2627350
OrdnerA4 8cm Pure Glam 2.64 2582799
agipa Ordnerrücken-Etiketten, kurz/ breit, weiß (66000322) 0.79
далее Мы можем добавить фильтры, но это, кажется, уже работает. Так что сосредоточьтесь на текстовом поиске: теперь пользователь вводит в запрос следующую фразу:
ordner 1010 rot
Написанный мною запрос:
String _ja = "{" +
" 'query': {" +
" 'bool': {" +
" 'must': {" +
" 'multi_match': {" +
" 'query': '" + safe_input + "'," +
" 'fields': [" +
" 'name','artikelNr','ean','description','herstellerNr','hersteller'" +
" ],'type': 'phrase_prefix', 'tie_breaker': 0.3" +
" }" +
" }";
if(filter_ids != null) {
_ja +=" ,'filter': {";
for(long id : filter_ids) {
_ja +=" 'term': {" +
" 'filter': '" + id + "'" +
" }";
}
_ja +=" }";
};
_ja += "}" +
" },\n";
if(sortby == 1)
_ja += "'sort' : { 'pv_vk_netto': {'order': 'asc'} }";
else if(sortby == 2)
_ja += "'sort' : { 'pv_vk_netto': {'order': 'desc'} }";
else if(sortby == 3)
_ja += "'sort' : { 'name': {'order': 'asc'} }";
else if(sortby == 4)
_ja += "'sort' : { 'name': {'order': 'desc'} }";
else
_ja += "'sort' : { '_score': {'order': 'desc'} }";
_ja += "}";
_ja = _ja.replaceAll("'", "\"");
Вышеупомянутый запрос работает для поисковая фраза:
order 1010
, но если мы введем в поиск
ordner 1010 rot
, мы не получим никаких результатов. Я полагаю, что я что-то делаю неправильно или я использую неправильный запрос ... :)
По моему мнению, каждый токен в поисковой фразе должен быть символом подстановки. Таким образом, запрос звучит как поиск товаров, в которых в любом поле существует токен ordner , а 1010 существует и rot .
Какие результаты я ожидаю:
Ordner 101050, PP A4 RB 80mm hellrot 180° Ordner Präzisionsmechanik 3.39
на первом месте в списке результатов. Что мне нужно изменить? большое спасибо!