В Lucene мы можем использовать TermQuery для поиска текста с полем. Мне интересно, как искать ключевое слово через кучу полей или все поля, доступные для поиска?Как искать по всем полям?
ответ
Два подхода
1) Индекс времени подход: Используйте кетчуп все поле. Это не что иное, как добавление всего текста из всех полей (общий текст из вашего входного документа) и размещение в нем огромного текста в одном поле. Вы должны добавить дополнительное поле, в то время как индексирование будет действовать как поле catch-all.
2) Подход поиска: используйте BooleanQuery для объединения нескольких запросов, например экземпляров TermQuery. Эти несколько запросов могут быть сформированы для охвата всех целевых полей.
Example проверка в конце статьи.
Используйте подход 2, если вы знаете список целевых полей во время выполнения. В противном случае вы должны использовать первый подход.
Другой подход, который не требует индексации ничего большего, чем то, что у вас уже есть, или объединения разных запросов, использует MultiFieldQueryParser
.
Вы можете предоставить список полей, в которых вы хотите выполнить поиск, и ваш запрос, вот и все.
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
Version.LUCENE_41,
new String[]{"title", "content", "description"},
new StandardAnalyzer(Version.LUCENE_41));
Query query = queryParser.parse("here goes your query");
Так я бы сделал это с оригинальной библиотекой lucene, написанной на Java. Я не уверен, доступен ли MultiFieldQueryParser
на lucene.net.
Другим простым подходом к поиску по всем полям с использованием «MultifieldQueryParser» является использование IndexReader.FieldOption.ALL в вашем запросе.
Вот пример в C#.
Directory directory = FSDirectory.Open(new DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath)));
//get analyzer
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
//get index reader and searcher
IndexReader indexReader__1 = IndexReader.Open(directory, true);
Searcher indexSearch = new IndexSearcher(indexReader__1);
//add all possible fileds in multifieldqueryparser using indexreader getFieldNames method
dynamic queryParser = new MultiFieldQueryParser(Version.LUCENE_29, indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer);
dynamic query = queryParser.Parse(Criteria);
TopDocs resultDocs = null;
//perform search
resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc());
dynamic hits = resultDocs.scoreDocs;
click here проверить мой проницаемый ответ на тот же quesiton в vb.net
Я не вижу смысла использовать утку, набрав здесь (т. Е. Ключевое слово 'dynamic'). Может быть, вы хотели использовать типовое взаимодействие с 'var'? –
- 1. Как искать по всем полям таблицы LINQ?
- 2. Поиск по всем полям
- 3. Поиск по всем полям объекта
- 4. Mongoose поиск по всем полям
- 5. EJB - Как искать по неиндексированным полям?
- 6. По умолчанию поиск по всем полям
- 7. Запрос MYSQL для поиска по всем полям?
- 8. .change() по всем текстовым полям и текстовым полям
- 9. Выберите Результат, сгруппированный по всем полям
- 10. Поиск по всем полям с подсветкой
- 11. Как искать строку по нескольким полям в elsatic поиска
- 12. Как выполнить поиск по определенному полю, а не по всем полям в search_fields
- 13. Как эффективно искать подстроки по всем значениям в hashmap?
- 14. Требовать @NotNull и @ Необязательные аннотации по всем полям и параметрам?
- 15. JQuery Validator отключает всплывающие подсказки по всем полям формы
- 16. AWK цикл по всем полям в одном файле
- 17. Создание анализируемого и not_analyzed индекса по всем полям в Elasticsearch
- 18. Изменение форматирования валюты по всем валютным полям во всех формах
- 19. Использования $ каждого с $ толчка по всем полям в питоне
- 20. поиск ElasticSearch пролет над многократным индекса по всем полям
- 21. Итерации по всем полям формы с селеном в ruby
- 22. Итерация по всем полям в формате PDF с помощью JavaScript
- 23. Позволяет пользователям искать по любым полям медленную систему?
- 24. Применение функции ко всем полям ввода текста
- 25. Привязать цвет фона ко всем текстовым полям
- 26. угловой не соответствует всем моим обязательным полям
- 27. Назначить событие Keydown всем текстовым полям
- 28. Присоединяйтесь ко всем полям без их перечисления?
- 29. PHP MySQL array_diff не соответствует всем полям
- 30. awk - применяется ко всем полям, кроме одного?
Спасибо за хорошее большую картину объяснения. Первый подход - это то, что я использую при хранении различных типов продуктов в одном индексе, например, «Принтеры и мониторы», где для каждого документа существуют разные поля, но я хочу использовать «полнотекстовый» поиск с помощью простой строки поиска и возвращать все продуктов, которые соответствуют. – nothingisnecessary