Изменение шаблона поискового запроса Solr

#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 * .

Как я могу этого добиться

  1. Это означает, что если какая-либо метка содержит совпадение с извлечением, она должна быть первой (в настоящее время происходит)

  2. После этого, если какая-либо метка содержит строку ВКУСА в первой части метки, например, 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 = ВКУС не работает, нет