Я создаю решение, которое имеет основной LuceneDocument типа "Артефакт".
В артефакте мы извлекаем сложные типы данных для дальнейшей классификации и организации данных. В рамках нашей индексации Solr наша цель - позволить пользователям выполнять поисковые запросы по всему тексту артефакта, а также по этим сложным типам данных.
Пример текста:
"Молодой человек по имени Джон Доу перепрыгнул через ленивую собаку, а затем пообедал на бул. Индиана, 123, Питтсбург, Пенсильвания, 15235 с коричневой лисой. Через некоторое время коричневая лиса полетела навестить Президента в 1600 году в Пенсильвании Ave, Washington, DC 20500 "
Наш процесс извлечения извлечет три полезных объекта:
- Персона - Джон Доу
- Адрес - бул. Индиана, 123, Питсбург, Пенсильвания 15235
- Адрес - 1600 Pennsylvania Ave, Washington, DC 20500
Нам нужно еще раз разложить # 2 & # 3 в
- streetAddressOne
- город
- состояние
- 1028 * ZipCode *
Во время публикации Solr мы создадим индексируемый объект (используя Solr4J) со следующими полями:
@Field
String artifactBody;
@Field
List<String> streetAddressOne;
@Field
List<String> city;
@Field
List<String> state;
@Field
List<String> zipCode;
@Field
List<String> person;
Все идет хорошо, и мы публикуем эти записи в Solr без проблем.
По запросу пользователя "streetAddressOne: Indiana AND city: Washington" мы получим ложный положительный результат. Теперь реальность такова, что в Вашингтоне, округ Колумбия, действительно есть Индиана-авеню, поэтому поиск является правильным адресом.
Это общее описание нашего варианта использования, и я спрашиваю о некоторых альтернативных подходах, которые гарантируют, что этот ложный положительный результат не возвращается, но сопоставление для сложных типов все еще доступно.
Я начал с типа PolyField, но, похоже, он не применяется, когда вы хотите найти подмножество всех полей в наборе.
Я также исследую путь превращения Address в элемент LuceneDocument, который публикуется в Solr. Проблема заключается в том, что набор результатов должен отражать список артефактов, а не список адресов. Эта возможность «подобного соединению» просто недоступна в поисковой системе, поэтому я отошел от этой идеи.