1
문서 내의 여러 필드 (This is what I'm trying to do)를 검색 할 수 있도록 만들고 색인을 작성하려고합니다. 내가하려고하는 것을 설명하기 위해이 테스트 클래스를 만들었습니다. 제 문제는 인덱스에서 Note
필드를 분리하여 Note
의 모든 단어를 검색 할 수 있도록하는 것입니다. 그러나 나는 첫 번째 단어 나 문자로 검색을하면 'A'가 될 테스트에서 아무런 히트도 얻지 못한다는 것을 알았지 만, 'B'로 검색하면 성공할 수 없다는 것을 알아 냈습니다. 왜 그런지.RavenDb 인덱스, 분할 필드, 분할의 첫 번째 항목에 적중 없음
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")
}
};
}
}
}
무엇이 여기에 있습니까?
네, 그건 사실입니다. 내 생각에 그건 나쁜 부분이었습니다.). 그러나 메모를 '다른 값'으로 변경하고 '일부'를 검색하면 결과가 같아 지므로 테스트 결과가 없습니다. 스플릿의 첫 번째 값이 인덱싱되지 않는 것 같습니다. – Pelle