Как запросить данные, проиндексированные как IndexEmbedded (FullText в nhibernate.search) - PullRequest
0 голосов
/ 07 апреля 2009

Как запросить данные, добавленные как IndexEmbedded?
У меня есть класс сущности

  [Indexed]
  public class Something
  {
    [Field(Index.Tokenized, Store = Store.Yes)]
    public virtual string Description { get; set; }

    [IndexedEmbedded]
    public virtual Category Category { get; set; }
    [IndexedEmbedded]
    public virtual Location Location { get; set; }
  }

Местоположение как

[Indexed]
  public class Location 
  {
    /// </summary>            
    [Field(Index.Tokenized, Store = Store.Yes)]
    public virtual string Address
    {
  }

Данные добавляются (как для обычных свойств, так и для IndexEmbedded) в индекс, и я могу видеть их с помощью Luke.
Однако когда я выполняю запрос с использованием полнотекстового ввода, я получаю действительные результаты только для обычных свойств, а не для IndexedEmbedded
например. "пример описания" => 1 результат, "Пало-Альто" => 0 результатов (оба они в индексе) Это мой запрос

using (IFullTextSession s = Search.CreateFullTextSession(NHibernateSession.GetSession())) {
        MultiFieldQuerParser qp = new MultiFieldQueryParser(new[] {
                                                                     “Description”,“Title”,”Name”
                                                                   }, new StandardAnalyzer());
        IQuery NHQuery = s.CreateFullTextQuery(qp.Parse(query), typeof(Something));
        result = NHQuery.List();

Я что-то делаю не так или что-то не так?

1 Ответ

2 голосов
/ 29 июля 2009

Из того, что я вижу, вы не ссылаетесь на поля для коллекций IndexedEmbedded. Вы должны добавить следующие поля в свой MultiFieldQueryParser

new MultiFieldQueryParser(new[] {"Description", "Title", "Name", "Location.Address"})

В Luke должны быть видны правильные имена полей с префиксом имени свойства, к которому вы применили атрибут IndexedEmbedded .


edit : Если префикс по умолчанию вам не нравится, вы можете изменить его с помощью аргумента префикса атрибута IndexedEmbedded

...