Литература Введение Lucene Обзор
Download 219.91 Kb.
|
1 sam top
- Bu sahifa navigatsiya:
- 3.6. Синтаксис запроса
- 4. Простое приложение
3.5. ПоискПосле создания индекса мы можем выполнять поиск по этому индексу, используяQuery иIndexSearcher.. Результатом поиска обычно является набор результатов, содержащий извлеченные данные. Обратите внимание, чтоIndexWritter отвечает за создание индекса, аIndexSearcher - за поиск по индексу. 3.6. Синтаксис запросаLucene предоставляет очень динамичный и простой в написании синтаксис запроса. Для поиска по произвольному тексту мы просто использовали бы текстString в качестве запроса. Для поиска текста в определенном поле мы будем использовать: fieldName:text eg: title:tea Диапазон поиска: timestamp:[1509909322,1572981321] Мы также можем искать с использованием подстановочных знаков: dri?nk будет искать один символ вместо подстановочного знака «?» d*k поиск слов, начинающихся с «d» и заканчивающихся на «k», с несколькими символами между ними. uni* найдет слова, начинающиеся с «уни». Мы также можем комбинировать эти запросы и создавать более сложные запросы. И включите логический оператор как И, НЕ, ИЛИ: title: "Tea in breakfast" AND "coffee" Подробнее о синтаксисе запросаhere. 4. Простое приложениеДавайте создадим простое приложение и проиндексируем несколько документов. Сначала мы создадим индекс в памяти и добавим в него несколько документов: ... Directory memoryIndex = new RAMDirectory(); StandardAnalyzer analyzer = new StandardAnalyzer(); IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer); IndexWriter writter = new IndexWriter(memoryIndex, indexWriterConfig); Document document = new Document(); document.add(new TextField("title", title, Field.Store.YES)); document.add(new TextField("body", body, Field.Store.YES)); writter.addDocument(document); writter.close(); Здесь мы создаем документ сTextField и добавляем их в индекс с помощьюIndexWriter. Третий аргумент в конструктореTextField указывает, должно ли значение поля также сохраняться или нет . Анализаторы используются для разделения данных или текста на куски, а затем отфильтровывают из них стоп-слова. Стоп-слова - это такие слова, как «a», «am», «is» и т. Д. Это полностью зависит от данного языка. Затем давайте создадим поисковый запрос и выполним поиск в указателе добавленного документа: public List searchIndex(String inField, String queryString) { Query query = new QueryParser(inField, analyzer) .parse(queryString); IndexReader indexReader = DirectoryReader.open(memoryIndex); IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs topDocs = searcher.search(query, 10); List documents = new ArrayList<>(); for (ScoreDoc scoreDoc : topDocs.scoreDocs) { documents.add(searcher.doc(scoreDoc.doc)); } return documents; } В методеsearch() второй целочисленный аргумент указывает, сколько лучших результатов поиска он должен вернуть. Теперь давайте проверим это: @Test public void givenSearchQueryWhenFetchedDocumentThenCorrect() { InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer()); inMemoryLuceneIndex.indexDocument("Hello world", "Some hello world"); List documents = inMemoryLuceneIndex.searchIndex("body", "world"); assertEquals( "Hello world", documents.get(0).get("title")); } Здесь мы добавляем в индекс простой документ с двумя полями ‘title 'и‘ body', а затем пытаемся найти его с помощью поискового запроса. Download 219.91 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling