.net lucene Мультиполе поиск - PullRequest
       6

.net lucene Мультиполе поиск

2 голосов
/ 16 сентября 2009

Я создал индекс как

Document doc = new Document();
        doc.Add(new Field("SearchKey", (item.FullTextColumn ?? item.Code), Field.Store.NO, Field.Index.TOKENIZED));
        doc.Add(new Field("Type", item.Type.ToString(), Field.Store.YES, Field.Index.TOKENIZED));
        doc.Add(new Field("Name", item.Name, Field.Store.YES, Field.Index.UN_TOKENIZED));
        doc.Add(new Field("Code", item.Code ?? string.Empty, Field.Store.YES, Field.Index.UN_TOKENIZED));

и т.д.

и я пытаюсь найти такой термин, как «Канзас-Сити» в поле «SearchKey», а другой «Тип» должен быть «Аэропорт»

для этого я пишу

QueryParser parser = new QueryParser("SearchKey", analyzer);
        Query searchQuery = parser.Parse(text);
 TermQuery typeQuery = new TermQuery(new Term("Type", "Airport"));
 BooleanQuery filterQuery = new BooleanQuery();
        filterQuery.Add(typeQuery, BooleanClause.Occur.MUST);
        Filter f = new QueryFilter(filterQuery);
 Hits results = searcher.Search(searchQuery,f);

но это не дает мне результата,

если я уберу 'f' из

Hits results = searcher.Search(searchQuery,f);

тогда это дает результат, но поле «Тип» содержит значения, отличные от «Аэропорт».

Любая идея, где я иду не так?

1 Ответ

2 голосов
/ 16 сентября 2009

Глядя на ваш код, я думаю, что вам нужно добавить каждый запрос (один для SearchKey и один для типа) в BooleanQuery, как показано ниже.

var standardLuceneAnalyzer = new StandardAnalyzer();

var query1 = new QueryParser("SearchKey", standardLuceneAnalyzer).Parse("Kansas City*");
var query2 = new QueryParser("Type", standardLuceneAnalyzer).Parse("Airport");

BooleanQuery filterQuery = new BooleanQuery();
filterQuery.Add(query1, BooleanClause.Occur.MUST);
filterQuery.Add(query1, BooleanClause.Occur.MUST);

TopDocs results = searcher.Search(filterQuery);

Я не проверял код, но он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...