У меня возникли некоторые проблемы с запросом фразы, поэтому напишите небольшой код, чтобы точно знать, как на самом деле работает запрос фразы с отстойным материалом:
У меня есть строка "abc Institute of Technology", и я проиндексировал различные комбинацииэтой строки (больше похожей на гальку) вот так
Document doc = new Document();
ArrayList<String> sh = new ArrayList<String>();
sh.add("abc institute engineering technology");
sh.add("abc institute engineering");
sh.add("abc institute");
sh.add("abc");
sh.add("institute engineering technology");
sh.add("institute engineering");
sh.add("institute");
sh.add("engineering technology");
sh.add("engineering");
sh.add("technology");
for(String s : sh){
doc.add(new Field("insti_shingles", s.toLowerCase(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
}
writer.addDocument(doc);
Теперь, когда я читаю все токены из каталога индекса, у меня есть этот набор токенов:
engineering technology
abc
institute
abc institute engineering technology
technology
abc institute
abc institute engineering
institute engineering technology
engineering
institute engineering
Теперь, когда япоиск по термину "abc institute technology"
IndexSearcher searcher = new IndexSearcher(dir);
BooleanQuery booleanQuery = new BooleanQuery();
PhraseQuery query = new PhraseQuery();
query.add(new Term("insti_shingles", "abc institute technology"));
query.setSlop(4);
booleanQuery.add(query, BooleanClause.Occur.SHOULD);
TopDocs hits = searcher.search(booleanQuery, 30);
Теперь, согласно документации запроса фразы с slop, я должен получить некоторые результаты, но я получаю пустой набор результатов.Но я получаю результат, когда я ищу термин, который точно соответствует индексируемому токену.
Я думаю, что термин «технология abc institute» должен совпадать с токеном «технология разработки abc institute», когда мы используем фразу-запрос???
Я делаю что-то не так?Помощь