микпальмия верна.Для создания небольшого указателя вопросов меньше не нужно было бы использовать Elastic Search или Solr.Вам следует использовать lucene-core и lucene.
Если вы используете maven в своем java-проекте, вы можете включить следующую зависимость в свой pom.xml.
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>7.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-queryparser -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>7.3.1</version>
</dependency>
Как только вы получите этибиблиотеки, вы можете индексировать свои вопросы как документы, следуя этому коду .Где ваш документ может быть простым объектом, содержащим Идентификатор вопроса, Название и Описание.
private org.apache.lucene.document.Document createDocument
(String id, String title, String description){
Document document = new Document();
document.add(new StringField("id", id, Field.Store.YES));
document.add(new StringField("title", title, Field.Store.YES));
document.add(new StringField("description", description, Field.Store.YES));
return document;
}
При поиске дублирующего вопроса вы будете следовать этот код
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
private static TopDocs searchByTitle(String title, IndexSearcher searcher)
throws Exception {
QueryParser qp = new QueryParser("title", new StandardAnalyzer());
qp.setAllowLeadingWildcard(true);
Query titleQuery = qp.parse(title);
TopDocs hits = searcher.search(firstNameQuery, 10);
return hits;
}
гдеВы также можете указать функции searchByTitle выполнить поиск по описанию
TopDocs docs = searchByTitle(" ( title:" + enteredText + "~ OR title:*" + enteredText +
"* ) OR ( description:" + enteredText + " )", searcher)