RavenDb索引,拆分字段,拆分中的第一个项目没有命中

时间:2012-06-10 09:50:27

标签: indexing ravendb

我正在尝试创建和索引,以便我可以搜索文档中的多个字段(This is what I'm trying to do)。我已经创建了这个测试类来说明我想要做的事情。我的问题在于,在索引中我将Note字段拆分为Note中的任何单词都可以搜索到。但是我注意到,如果我用第一个单词或字母进行搜索,那么在测试中将是'A'我没有得到命中,但是如果我用'B'搜索得到命中,就无法计算为什么会这样。

public class Sandbox
{
    [Fact]
    public void Run_Forrest_Run()
    {
        var store = new EmbeddableDocumentStore
        {
            RunInMemory = true, 
            Conventions = { DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites }
        };

        store.Initialize();
        IndexCreation.CreateIndexes(typeof(SearchExpenseIndex).Assembly, store);

        using (store)
        {
            using (var session = store.OpenSession())
            {
                session.Store(new Expense
                {
                    Date = DateTime.Today,
                    Category = "Transport",
                    Amount = 1000,
                    Note = "A B C"
                });

                session.SaveChanges();
            }

            Thread.Sleep(1000);

            // var terms = new[] {"A"}; <-- THIS WILL FAIL
            var terms = new[] {"B"};

            using (var session = store.OpenSession())
            {
                var result = session.Query<SearchExpenseIndex.ReduceResult, SearchExpenseIndex>()
                                .Where(x => x.Query.In(terms))
                                .As<Expense>()
                                .Select(x => new 
                                {
                                    Id = x.Id,
                                    Category = x.Category,
                                    Date = x.Date,
                                    Amount = x.Amount,
                                    Note = x.Note
                                }).ToList();


                Assert.Equal(1, result.Count);

            }
        }
    }

    public class Expense
    {
        public string Id { get; set; }
        public DateTime Date { get; set; }
        public string Category { get; set; }
        public decimal Amount { get; set; }
        public string Note { get; set; }
    }

    public class SearchExpenseIndex : AbstractIndexCreationTask<Expense, SearchExpenseIndex.ReduceResult>
    {
        public class ReduceResult
    {
        public string Query { get; set; }
        public string UserId { get; set; }
    }

        public SearchExpenseIndex()
    {
        Map = documents => from d in documents
            select new
            {
                Query = new object[]
                {
                    d.Category,
                    d.Note,
                    d.Note.Split(' '),
                    d.Date.ToString("yyyy-MM-dd")
                }
            };
        }
    }
}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

佩尔, 字符“A”是英语中的停用词。因此,你无法真正搜索它,因为几乎任何搜索词都会在那里搜索。