Поиск имени на Solr
Извиняюсь, если я публикую дублированный вопрос, если да, пожалуйста, укажите мне на оригинальный вопрос.
Я новичок в Solr и пытаюсь добиться упорядоченного поиска по названию слова с помощью Solr. Я ожидаю следующего ответа от Solr
Name Search Term Result
Thomas Alva Edison Thomas Match
Thomas Alva Edison Alva Match
Thomas Alva Edison Edison Match
Thomas Alva Edison Thomas Edison Match
Thomas Alva Edison Thomas Alva Match
Thomas Alva Edison Alva Edison Match
Thomas Alva Edison Thomas Alva Edison Match
Thomas Alva Edison homas No Match
Thomas Alva Edison Edison Thomas No Match
Thomas Alva Edison homas edison No Match
Thomas Alva Edison homas dison No Match
Я генерирую запросы, используя MethodName, используя весенние данные Solr. Пожалуйста, помогите мне, как я должен сформировать мою схему для индексации этих данных и какие фильтры я должен использовать?
Также объясните мне, как формировать запросы, используя methodName, используя весенний анализатор данных из соответствующего результата.
2 ответа
Ваш schema.xml
может быть тот, который поставляется с solr
потому что уже есть поле с именем name
(маркирован и проиндексирован) там следующим образом:
<field name="name" type="text_general" indexed="true" stored="true"/>
так что все, что вам нужно сделать, это создать документ по этому индексу:
curl localhost:8983/solr/collection1/update/json?commit=true -H 'Content-type:application/json' -d '
[
{
"id" : "1",
"name" : "Thomas Edison"
}
]'
Вероятно, у вас есть класс Java, представляющий структуру вашего документа более или менее следующим образом:
@SolrDocument(solrCoreName = "collection1")
public class Person {
@Id
private Long id;
@Indexed
private String name;
// setters and getters
}
и хранилище следующим образом:
public interface PersonDao extends SolrCrudRepository<Person, Long> {
// derivable method names here
}
для поиска по имени вы можете объявить следующий метод:
List<Person> findByName(String name);
Поскольку поле является токенизированным, оно будет искать предоставленный параметр в токене из этого поля. Это приведет к ожидаемым результатам.
Для этой довольно специфической необходимости мне не приходит в голову фильтр / токенизатор.
Что вы можете попробовать, это SurroundQueryParser (не пробовал сам)
Если это не сработает для вас настолько печально, насколько это возможно, если бы я был там, я бы подумал о настройке какого-то рода:
- Плагин фильтра Solr, который будет производить необходимые токены (что-то похожее на фильтр Shingle)
- Создайте файл в документе, который будет содержать только разрешенные совпадения, и используйте что-то вроде токенайзера ключевых слов для обеспечения порядка