Можем ли мы назначить более одного идентификатора шаблона в templateId (как мы делаем в relatedId) при поиске с помощью Lucene? - PullRequest
1 голос
/ 15 марта 2012

У меня есть пять флажков

  • Поиск всех
  • Шаблон 1
  • Шаблон 2
  • Шаблон 3
  • Шаблон 4

Если пользователь выбирает Search All, то просто мы можем передать имя индекса и получить результат, если пользователь выбирает один из флажков, специфичных для шаблона, опять же, просто мы можем сделать это, передавая имя шаблона, но если флажок любого из двух шаблонов специфичен (или может быть три) проверены, тогда?

Можем ли мы разделить по шаблону идентификаторы шаблона?

Ответы [ 2 ]

1 голос
/ 16 марта 2012

В дополнение к тому, что сказал Марк, этого можно достичь с помощью следующей функции:

protected void ApplyTemplateFilter(CombinedQuery query, string templateIds)
{
  if (String.IsNullOrEmpty(templateIds)) return;
  var fieldQuery = new CombinedQuery();
  var values = IdHelper.ParseId(templateIds);
  foreach (var value in values.Where(ID.IsID))
  {
    AddFieldValueClause(fieldQuery, BuiltinFields.Template, value, QueryOccurance.Should);
  }
  query.Add(fieldQuery, QueryOccurance.Must);
}
1 голос
/ 15 марта 2012

Вам может потребоваться изменить метод в Advanced Database Crawler для обработки GUID переданных шаблонов. У класса SearchParam есть свойство с именем TemplateIds, которое во множественном числе указывает, что оно должно разрешать более одного. Однако, если вы посмотрите на код, вот как он используется:

templateIds = IdHelper.NormalizeGuid(templateIds);

Метод NormalizeGuid() на самом деле возвращает только один GUID . Поэтому я рекомендую вам изменить метод ApplyTemplateFilter(), чтобы он возвращал несколько GUID шаблона:

protected void ApplyTemplateFilter(CombinedQuery query, string templateIds, QueryOccurance occurance)
{
  if (String.IsNullOrEmpty(templateIds)) return;

  templateIds = IdHelper.NormalizeGuid(templateIds);
  var fieldQuery = new FieldQuery(BuiltinFields.Template, templateIds);
  query.Add(fieldQuery, occurance);
}

Так что измените templateIds = IdHelper.NormalizeGuid(templateIds) для обработки нескольких GUID, возможно, разделив входные данные на |, чтобы получить каждый GUID, затем нормализуя каждый из них и объединяя их снова через |.

...