Я пробовал много анализаторов lucene и нашел, что анализатор ключевых слов является лучшим для моего требования. Я использую тот же анализатор ключевых слов как для обновления документа, так и для поиска с использованием QueryParser. Я хочу найти значения с поддержкой подстановочных знаков. Например: если поле «страна» содержит значение «india» Я могу найти то же поле, что и «ind *», «ndi», india и т. Д. Я получаю соответствие для всех других запросов, кроме точное совпадение. т.е. когда я ищу точное слово (страна: Индия), я не получаю никакого соответствия. Если я изменяю тот же запрос, что и «страна: india *» или «страна: indi?», Я получаю матч . Также у меня есть еще одно сомнение, если есть страна с именем «нет», как я могу искать то же самое. Я попробовал «страна:» не «» и «страна: \ нет». Но оба потерпели неудачу. Что происходит в обоих случаях? Пожалуйста, помогите.Lucene Analyzer для простого прямого поиска поля
ответ
Я подозреваю, что у вас есть пробелы или другие посторонние символы после названия страны. Вы можете либо урезать свой вклад, прежде чем добавить в Lucene, или реализовать анализатор пользовательских ключевых слов, и добавить TrimFilter
, что-то вроде:
public final class CustomKeywordAnalyzer extends Analyzer {
public CustomKeywordAnalyzer() {
}
@Override
protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
Tokenizer tokenizer = new KeywordTokenizer(reader)
TokenStream filter = new TrimFilter(Version.LUCENE_43, tokenizer);
return new TokenStreamComponents(tokenizer, filter);
}
}
Что касается поиска «нет», это просто быть в нижнем регистре должны быть адекватными поскольку он не должен интерпретироваться как логический оператор (AND
, OR
и NOT
, операторы должны быть прописными, за the documentation). Эти слова поймают стандартный английский StopFilter
, хотя, например, тот, который используется StandardAnalyzer
. Вы действительно используете KeywordAnalyzer
при запросе?
Запрещая что, однако, верный способ избежать парсер запросов зарезервированных слов было бы просто обойти анализатор запросов полностью, и построить в запросе себя:
Query query = new TermQuery(new Term("country", userQuery));
- 1. Lucene Analyzer для индексации и поиска
- 2. Tokenizer Lucene Analyzer для поиска подстроки
- 3. Создание объекта Lucene Analyzer
- 4. Lucene custom analyzer
- 5. Lucene Standard Analyzer vs Snowball
- 6. Как использовать Lucene для поиска
- 7. пересечения поиска - Lucene
- 8. Lucene Custom Analyzer для индексирования и запроса
- 9. Запрос на Lucene Analyzer и результаты поиска Релевантность Оценка
- 10. Lucene - исключить из поиска поля
- 11. Использование Apache Lucene для поиска
- 12. Azure Search Analyzer
- 13. поиска в индексе Lucene
- 14. Как использовать несколько фильтров на Lucene Analyzer (Lucene 4.4)
- 15. Удалить символ пробела из Lucene Standard Analyzer
- 16. Код для прямого поиска DNS
- 17. недопустимые символы для Lucene поиска текста
- 18. Можно ли использовать один экземпляр Lucene Analyzer для всего приложения поиска?
- 19. Префикс поиска с использованием lucene
- 20. Zend Lucene релевантность поиска
- 21. Проблема поиска Lucene
- 22. Lucene Получить оценку от поиска
- 23. запроса для результата поиска Lucene
- 24. lucene обход парсер для поиска?
- 25. Оптимизация производительности поиска lucene
- 26. Как выполнить непостоянное XSS-приложение для простого поля поиска php
- 27. Как получить все условия для поля Lucene в Lucene 4
- 28. Результаты поиска в Lucene
- 29. Lucene - специализированный TokenStream/Analyzer с учетом набора индексируемых ключевых слов
- 30. Устранение неполадок Java Lucene игнорирование поля
Спасибо за ценный ответ. Хотя это не полностью решает мою проблему. Это помогло мне многому понять многие вещи, чтобы я мог решить все остальное сам. :) –