Я пытаюсь проиндексировать значение, которое выглядит следующим образом:
Test (Test)
Используя StandardAnalyzer, я попытался добавить его в свой документ, используя:
Field.Store.YES, Field.Index.TOKENIZED
Когда я выполняю поиск по значению «Test (Test)», мой QueryParser генерирует следующие теги:
+Name:test +Name:test
Это работает так, как я ожидаю, потому что я не экранирую специальные символы.
Однако, если я выполняю QueryParser.Escape ('Test (Test)') при индексации моего значения, он создает условия:
[test] and [test]
Тогда, когда я выполняю поиск, такой:
QueryParser.Escape('Test (Test)')
Я получаю те же два термина (как я и ожидал). Проблема в том, что если у меня есть два документа с именами:
Test
Test (Test)
Соответствует обоим. Если я укажу значение поиска «Test (Тест)», то я просто хочу получить второй документ. Мне любопытно, почему экранирование специальных символов не сохраняет их в созданных терминах. Есть ли альтернативный анализатор, на который я должен посмотреть? Я посмотрел на WhitespaceAnalyzer и KeywordAnalyzer. WhitespanceAnalyzer чувствителен к регистру, и KeywordAnalyzer хранит его как единое выражение:
[Test (Test)]
Это означает, что, если я выполню поиск только «Тест», я не смогу вернуть оба документа.
Есть идеи, как это реализовать? Не похоже, что это должно быть так сложно.