Die Suche nach Teilzeichenfolgen in RavenDB

Habe ich eine Reihe von Objekten des Typs Idea

public class Idea
{
    public string Title { get; set; }
    public string Body { get; set; }
}

Will ich Suche diese Objekte von substring. Zum Beispiel, wenn ich ein Objekt der Titel "Idee", will ich es gefunden, wenn ich geben Sie einen beliebigen Teilstring "Idee": i, - id, - ide, Idee, d, de, dea, e, ea, ein.

Ich bin mit RavenDB für die Speicherung von Daten. Die Suchanfrage wie folgt Aussehen:

var ideas = session
              .Query<IdeaByBodyOrTitle.IdeaSearchResult, IdeaByBodyOrTitle>()
              .Where(x => x.Query.Contains(query))
              .As<Idea>()
              .ToList();

während der index ist folgende:

public class IdeaByBodyOrTitle : AbstractIndexCreationTask<Idea, IdeaByBodyOrTitle.IdeaSearchResult>
{
    public class IdeaSearchResult
    {
        public string Query;
        public Idea Idea;
    }

    public IdeaByBodyOrTitle()
    {
        Map = ideas => from idea in ideas
                       select new
                           {
                               Query = new object[] { idea.Title.SplitSubstrings().Concat(idea.Body.SplitSubstrings()).Distinct().ToArray() },
                               idea
                           };
        Indexes.Add(x => x.Query, FieldIndexing.Analyzed);
    }
}

SplitSubstrings() ist eine Erweiterung Methode gibt alle unterschiedlichen substrings des gegebenen Strings:

static class StringExtensions
{
    public static string[] SplitSubstrings(this string s)
    {
        s = s ?? string.Empty;
        List<string> substrings = new List<string>();
        for (int i = 0; i < s.Length; i++)
        {                
            for (int j = 1; j <= s.Length - i; j++)
            {
                substrings.Add(s.Substring(i, j));
            }
        }            
        return substrings.Select(x => x.Trim()).Where(x => !string.IsNullOrEmpty(x)).Distinct().ToArray();
    }
}

Ist dies nicht funktioniert. Vor allem, weil RavenDB ist nicht zu erkennen SplitSubstrings() Methode, weil es ist in meiner benutzerdefinierten assembly. Wie diese Arbeit zu machen, im Grunde, wie zu zwingen, RavenDB zu erkennen, diese Methode ? Außerdem ist mein Ansatz für diese Art der Suche (Suche von Teilstring) ?

BEARBEITEN

Im Grunde, das ich bauen will auto-complete-Funktion auf dieser Suche, so müssen Sie schnell sein.

Die Suche nach Teilzeichenfolgen in RavenDB

Btw: ich bin mit RavenDB - Build #960

  • RavenDB Indizes auf dem server ausgeführt, und daher haben Sie nicht den Zugriff auf benutzerdefinierte code wie. Der index, den Sie schreiben, wird in einen string umgewandelt, die an den server gesendet und kompiliert drüben, die StringExtension code nicht mit ihm zu gehen, daher der Fehler.
  • Ich weiß, dass dies ist der server der Seite die Verantwortung, aber gibt es eine Möglichkeit, um zu injizieren, da meine benutzerdefinierten code ? Vielleicht mit Hilfe von Reflexion ?
InformationsquelleAutor jwaliszko | 2012-03-15
Schreibe einen Kommentar