Я проиндексировал свою базу данных с помощью Hibernate Search. Я использую собственный анализатор, как для индексации, так и для запросов. У меня есть поле под названием Inchikey, которое не должно быть размечено. Пример значения:
- BBBAWACESCACAP-UHFFFAOYSA-N
- KEZLDSPIRVZOKZ-AUWJEWJLSA-N
Когда я просматриваю свой индекс с Люком, я могу подтвердить, что они не являются токенизированными, как требуется.
Однако, когда я пытаюсь найти их с помощью веб-приложения, некоторые дюймовые ключи обнаруживаются, а другие нет. Любопытно, что для этих дюймов, поиск работает, когда я ищу без последнего дефиса, например: BBBAWACESCACAP-UHFFFAOYSA N
Мне не удалось найти общий элемент в дюймах, которые не были найдены.
Есть идеи, что здесь происходит?
Я использую MultiFieldQueryParser для поиска по различным полям в базе данных:
String[] searchfields = Compound.getSearchfields();
MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_29, Compound.getSearchfields(), new ChemicalNameAnalyzer());
//Disable the following if search performance is too slow
parser.setAllowLeadingWildcard(true);
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(parser.parse("searchterms"), Compound.class);
List<Compound> hits = fullTextQuery.list();
Более подробную информацию о нашей настройке выложили здесь Тим и я.