#java #sql #eclipse #lucene
#java #sql #eclipse #lucene
Вопрос:
Итак, я перепробовал абсолютно все типы запросов в lucene, и ни один из них, похоже, не работал. То, что я пытаюсь сделать, просто: я хочу запросить индекс, но я хочу получить точно такие же совпадения. И когда я говорю то же самое, я имею в виду, что результаты должны иметь тот же текст (очевидно) И ту же длину, что обычно происходит при запросе базы данных. Так, например, когда я ищу Джоди Фостер, я получаю этот текст в качестве одного из результатов: Список наград и номинаций, полученных Джоди Фостер. Мне не нужны результаты, содержащие поисковый запрос, мне нужны результаты, которые точно соответствуют поисковому запросу.
Прежде всего, вот как я создаю индекс lucene:
IndexWriterConfig luceneConfig = new IndexWriterConfig(new StandardAnalyzer());
Path path = Paths.get("C:/Users/i_l_g/Desktop/DBpedia/qls_labels");
Directory dir = FSDirectory.open(path);
IndexWriter writer = new IndexWriter(dir, luceneConfig);
while (rs.next()) {
Document doc = new Document();
doc.add(new Field("entity", rs.getString("entity"), TextField.TYPE_STORED));
doc.add(new Field("label", rs.getString("label"), TextField.TYPE_STORED));
writer.addDocument(doc);
}
rs — это переменная типа результирующего набора, и я, очевидно, просто извлекаю данные из таблицы и индексирую их с помощью Lucene.
Затем я попытался запросить этот индекс, используя все типы запросов, но каждый раз получаю один и тот же набор результатов, как будто я даже не менял тип запроса. Моей последней попыткой было использование PhraseQuery:
StandardAnalyzer analyzer = new StandardAnalyzer();
PhraseQuery.Builder builder = new PhraseQuery.Builder();
PhraseQuery q;
builder.add(new Term("label","jodie"));
builder.add(new Term("label","foster"));
builder.setSlop(0);
q=builder.build();
Это набор результатов, которые я получаю каждый раз, если это может помочь:
Найдено 5 обращений.
1. Джоди Фостер
2. Алисия Кристиан «Джоди» Фостер
3. Фильмография Джоди
Фостер4. Впечатлите Джоди Фостер
5. Список наград и номинаций, полученных Джоди Фостер
Я действительно не думал, что это займет у меня так много времени, я пытаюсь решить эту проблему уже 2 дня, и я посетил десятки ссылок, и, похоже, ни у кого никогда не было этой проблемы. Пожалуйста, помогите.
Комментарии:
1. От вашего индекса вы ожидаете единственного точного
Jodie Foster
или множественного возможного? Я имею в виду, если вы добавили много точныхJodie Foster
, то вам нужны все или только top?2. нет, я хочу их все, но я продолжаю получать очень длинные предложения…
3. @AliYahya В вашем примере вы хотите, чтобы в качестве результата было возвращено только число 1 «Джоди Фостер»? Я думаю, вам лучше уточнить вариант использования. Перечислите входной текст, текст поиска (я думаю, это только «Джоди Фостер») и ожидаемые результаты, чтобы помочь вам