#indexing #solr
#индексирование #solr
Вопрос:
<fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="label_en_US" type="text_gen_sort" docValues="true" multiValued="true" indexed="true" stored="true"/>
Привет, у меня есть пользовательское имя поля solr label_en_US, которое определяется как тип text_gen_sort .Мой индекс показан ниже
**("LEMON FLAVOUR","NEW LEMON FLAVOUR","LEMON","LEMON FLAVOURS","FLAVOUR LEMON","FLAVOURS LEMON","NEW LEMON FLAVOURS","NEW FLAVOUR LEMON","NEW FLAVOURS LEMON",
"FLAVOUR LEMON NEW","FLAVOURS LEMON NEW","NEWF LAVOUR LEMON","NEWF LAVOUR LEMON")**
Когда я ищу
serial:FLAVOUR^30
serial:FLAVOUR*^20
serial:*FLAVOUR^10
serial:*FLAVOUR*^5
label_en_US:FLAVOUR^30
label_en_US:FLAVOUR*^20
label_en_US:*FLAVOUR^15
label_en_US:FLAVOUR*^10
label_en_US:*FLAVOUR*^5
Запрос, приведенный выше, дает результат из solr, но мне нужно изменить порядок lable_en_US conatins, чтобы FLAVOUR
он был первым. Затем FLAVOUR *
, а затем * FLAVOUR
и * FLAVOUR *
.
Как я могу этого добиться
-
Это означает, что если какая-либо метка содержит совпадение с извлечением, она должна быть первой (в настоящее время происходит)
-
После этого, если какая-либо метка содержит строку ВКУСА в первой части метки, например, vise, но текущий результат
{ «id»: «90547cd3e816cdcf81918a1094019ac2», «label_en_US»: «ЛИМОННЫЙ ВКУС» }, { «id»: «90547cd3e816cdcf81918a109401b8e7», «label_en_US»: «НОВЫЙ ЛИМОННЫЙ ВКУС» }, { «id»: » 90547cd3e816cdcf81918a1094019125″, «label_en_US»: «ЛИМОН», }, { «идентификатор»: «90547cd3e816cdcf81918a109401a10d», «label_en_US»: «АРОМАТЫ ЛИМОНА» }, { «id»: «90547cd3e816cdcf81918a109401ebe2», «label_en_US»: «АРОМАТ ЛИМОНА» }, { «id»: » 90547cd3e816cdcf81918a109401fb45″, «label_en_US»: «АРОМАТЫ ЛИМОНА» }, { «id»:»90547cd3e816cdcf81918a109401c0f6″, «label_en_US»: «НОВЫЕ ВКУСЫ ЛИМОНА» }, { «id»: «90547cd3e816cdcf81918a109401ced6», «label_en_US»: «НОВЫЙ ВКУС ЛИМОНА» }, { «id»: » 90547cd3e816cdcf81918a109401dea0″, «label_en_US»: «НОВЫЕ АРОМАТЫ ЛИМОНА» }, { «id»:»90547cd3e816cdcf81918a1094020f68″, «label_en_US»: «НОВЫЙ ВКУС ЛИМОНА» }, { «id»: «90547cd3e816cdcf81918a1094021dc4», «label_en_US»: «НОВЫЙ ВКУС ЛИМОНА» }, { «id»: » 90547cd3e816cdcf81918a10940224b1″, «label_en_US»: «НЬЮФ ЛАВУР ЛЕМОН» }, { «id»:»90547cd3e816cdcf81918a109404d4fa», «label_en_US»: «НЬЮФ ЛАВУР ЛЕМОН» }
Но мне нужно получить «ВКУС ЛИМОНА» в качестве первого результата
Комментарии:
1. вы пытались использовать dismax или edismax?
2. что-то вроде q = ВКУС amp; defType= edismaxamp;qf = serial ^ 15 label_en_US ^ 5
3. если вы хотите получить точное соответствие, используйте string в качестве типа для вашего поля
4. я использовал edimax и также нуждаюсь в сортировке
5. @AbhijitBashetti q = ВКУС не работает, нет