Обработка множественных полей в Lucene
Я написал поисковик индекса в Lucene, который будет искать несколько полей в индексированной базе данных.
На самом деле он принимает запрос как две строки, одна скажетtitle
а другой есть.cityname
Теперь в индексированной базе данных есть три поля:.title, address and city
Попадание должно происходить только в том случае, если совпадает название и название города. Для этого я написал следующий код поисковика, используяMultiFieldQuerySearcher
с помощью поста:
public void searchdb(String myQuery, String myCity) throws Exception
{
System.out.println("Searching in the database ...");
String[] fields={"title","address","city"};
MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, fields, new StandardAnalyzer(Version.LUCENE_CURRENT));
parser.setDefaultOperator(QueryParser.Operator.AND);
if(!myQuery.toLowerCase().contains(myCity.toLowerCase()))
{
myQuery="title:"+myQuery+" "+"address:"+myQuery+" "+myCity+" "+"city:"+myCity;
}
Query query=parser.parse(myQuery);
if (query instanceof BooleanQuery)
{
BooleanClause.Occur[] flags ={BooleanClause.Occur.MUST,BooleanClause.Occur.SHOULD,BooleanClause.Occur.MUST};
BooleanQuery booleanQuery = (BooleanQuery) query;
BooleanClause[] clauses = booleanQuery.getClauses();
System.out.println("Query="+booleanQuery.toString()+" and Number of clauses="+clauses.length);
for (int i = 0; i < clauses.length; i++)
{
clauses[i].setOccur(flags[i]);
}
Directory dir=FSDirectory.open(new File("demoIndex"));
IndexSearcher searcher = new IndexSearcher(dir, true);
TopDocs hits = searcher.search(booleanQuery, 20);
searcher.close();
dir.close();
System.out.println("Number of hits="+hits.totalHits);
}
}
Но это не работает должным образом.
Например, если запрос "Пицца Хат " и город естьMumbai», Я хочу "Пицца Хат " искать только в поле заголовка базы данных, а Мумбаи - только в поле города базы данных.
Но это находкаHut» также в поле города базы данных в качестве вывода заявленияbooleanQuery.toString () идет как+ название: пицца + (название: хижина город: хижина) + город: мумбаи ".
В результате в цикле for выдается ошибка индекса outOfBound.
Я новичок в Lucene. Поэтому я прошу помощи, чтобы решить проблему.