Я прочитал пример spring-solr, и у меня есть вопрос:
В объекте Product есть много категорий, и я хочу индексировать и запрашивать их
В схеме у меня есть конфигурации:
<field name="categories" type="text_ws" multivalue="true"> (text_ws with a simple tokenizer: WhitespaceTokenizerFactory) (1)
or
<field name="categories" type="string" multivalue="true"> (2)
Когда это будет с помощью пути (1), я нажму на Solr с полной строкой, которая содержит категории, разделенные пробельной буквой, для индексирования, а также для запроса и с помощью способа (2), который представляет собой список строк с каждой строкой одной категории.
Я хотел бы знать, что путь лучше, чем для индексирования и для запросов. В представлениях сущности я предпочитаю (2) больше, чем (1), то есть список строк
StrField
будет соответствовать только если у вас есть точное соответствие или подстановочный запрос, соответствующий полю. Для значений не существует токенизация или фильтрация, а Foo
отличается от foo
. Это прекрасно, если все, что вам нужно, это отфильтровать на основе значения поля или использовать поле для огранки.
Если вы хотите искать в поле, сопоставляя только "за пределами" с "Bed, Bath & Beyond", вам понадобится TextField
с различными анализаторами и токенизаторами (в зависимости от того, как и что вы хотите сопоставить).
Это означает: это зависит от вашего варианта использования и того, чего вы хотите достичь. Также нет ничего плохого в том, чтобы иметь одинаковое значение в двух разных полях, где вы выполняете различную токенизацию или анализ для каждого поля. Используйте copyField
чтобы получить одно и то же значение в обоих полях, затем запросите каждое поле в зависимости от того, как вы хотите выполнить поиск или какую операцию вы хотите выполнить (например, используйте для огранки и одну для поиска).
Это зависит от того, как вы хотите использовать/использовать поле категорий.
Кстати, это multiValued не многозначный.