2

User次のようなクラスがあったとします。

public class User
{
  public bool IsActive {get;set;}
  public string[] Tags{get;set;}
  public string Description {get;set;}
}

RavenDB を使用して、次の条件に一致する一連のユーザーを検索したいと考えています。

  • IsActive=
  • Tags' hello ' と ' world 'の両方を含む
  • Descriptionには次のフレーズ「abject failure」があります

私は Lucene Query 構文を調査し、いくつかの作業を行いましたが、テキストベースの lucene クエリ文字列を作成するために多くの組み合わせ文字列を構築すると、すべてがひどく不格好に感じられます。非常に臭いので、ここにコードを掲載するのをためらっています。

私がやりたいことは、おそらくこのFilter RavenDB Search ResultsSearchのように、説明とタグの Lucene を送信Whereし、IsActive フィールドの句でフィルター処理することだと思います。しかし、私は迷子になりました。

私は最新の公式リリース (960) を使用しているので、これ以降のグルーヴィーなものはすべてまだ利用できません。たとえば、960 は拡張機能をサポートしていないように見えるため、このソリューションは禁止されています。.As<T>()

質問

組み合わせた検索を実行するために必要なインデックスとクエリを作成するにはどうすればよいですか。

  • 単一の制約、例えばIsActive
  • コレクション制約、例えばTags
  • フリーテキストの制約などDescription

Userオブジェクトの厳密に型指定されたリストを返すには?

コード例やポインタをありがとう。

4

1 に答える 1

1

次のようにクエリします。

var results = (from u in Session.Query<User>("YourUserIndex")
              where u.IsActive && u.Tags.Any(x=>x == "hello") && x.Tags.Any(x=>x=="world")
              select u)
              .Search(x=>x.Description, "abject failure")
              .ToList();

YourUserIndexのようになります。

from u in docs.Users
select new { u.IsActive, u.Tags, u.Description };

そして、説明フィールドを分析済みとしてマークする必要があります。

于 2012-10-26T06:46:07.290 に答える