Я не уверен, почему это не возвращает документы:
Добавляемые документы:
document.Add(new Field("project.id", projectId.ToString(), Field.Store.YES, Field.Index.NO));
document.Add(new Field("contact.id", entity.Id.ToString(), Field.Store.YES, Field.Index.NO));
document.Add(new Field("contact.businesspartnerid", entity.BusinessPartnerId.ToString(), Field.Store.YES, Field.Index.NO));
document.Add(new Field("contact.businesspartner.name", entity.BusinessPartner.Name, Field.Store.YES, Field.Index.ANALYZED));
document.Add(new Field("contact.emailaddress", entity.EmailAddress, Field.Store.YES, Field.Index.ANALYZED));
document.Add(new Field("contact.firstname", entity.FirstName, Field.Store.YES, Field.Index.ANALYZED));
document.Add(new Field("contact.lastname", entity.LastName, Field.Store.YES, Field.Index.ANALYZED));
document.Add(new Field("contact.fullname", entity.FirstName + " " + entity.LastName, Field.Store.YES, Field.Index.ANALYZED));
Запрос в Lucene.Net:
var prefix = "dan";
var fields = new {"contact.emailaddress"};
var filterFields = new Dictionary<string,string>();
filterFields.add("project.id","123456");
var parser = new MultiFieldQueryParser(Version.LUCENE_29, fields, new KeywordAnalyzer());
var query = new BooleanQuery();
query.Add(parser.Parse(prefix + "*"), BooleanClause.Occur.MUST);
if (filterFields != null)
{
foreach (var field in filterFields)
{
query.Add(parser.GetFieldQuery(field.Key, field.Value), BooleanClause.Occur.MUST);
}
}
Запрос, передаваемый в Lucene:
query.Query = {+ (contact.emailaddress: dan *) + project.id: 123456}
если я удаляю парсер. GetFieldQuery работает отлично. Когда я физически просматриваю индексный файл, появляется запись с project.id и запись, начинающаяся с «dan».
Должен ли я делать что-то еще, чтобы выполнить поиск по проекту.id?