Обработка множественных полей в 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. Поэтому я прошу помощи, чтобы решить проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос