Документы запросов Lucene, в которых имя совпадает с коллекцией - PullRequest
0 голосов
/ 09 мая 2020

У меня есть документы lucene со структурой ниже

 {
    name : "A",
    id :1
    },
{
    name : "B",
    id :1
    },
{
    name : "C",
    id :3
    }

Теперь у меня есть такая коллекция, как List, которая содержит A, B. Я хотел выбрать документы с именем A или B. Итак, согласно вышеупомянутым люценским документам, у меня должны быть документы A и B. Я хотел получить эти 2 документа с помощью одного вызова lucene вместо нескольких вызовов lucene для каждого документа.

Я попытался использовать BooleanQuery и добавить свой поисковый запрос в al oop, но поисковый запрос ничего не дал. если я нажимаю lucene с одним документом, он работает и возвращает один документ.

Может ли кто-нибудь предложить, как я могу получить все совпадающие документы с помощью одного запроса?

Я пробовал что-то вроде ниже

List<string> terms = new List<string>(){'A', 'B'};
var mainQuery = new BooleanQuery);
                var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "name", analyzer);
                foreach (var term in terms)
                {

                    var query = parser.Parse(term);
                    mainQuery.Add(query, Occur.MUST_NOT);

                } 
var hits = _searcher.Search(mainQuery, 1000);

Вышеуказанный запрос не сработал и вернул 0 результатов.

1 Ответ

0 голосов
/ 10 мая 2020

Я могу решить эту проблему самостоятельно. Это просто предложение OR, которое имеет значение Occur.SHOULD

var booleanQuery = new BooleanQuery();
                foreach (var term in terms)
                {
                    var termQuery = new TermQuery(new Term("name", term ));
                    booleanQuery.Add(termQuery, Occur.SHOULD);

                }
...