问题
I have (among others) the follwing objects in my RavenDB:
Object1
:
{
"Texts" : [ "one two", "three four" ]
}
Object2
:
{
"Texts" : [ "one three", "two four" ]
}
I want to find all objects where a string in Texts
contains both of the terms one
and two
.
If I index the field
from doc in docs.Objects select new { Texts }
and analyze it using the StandardAnalyzer
the following query will return both Object1
and Object2
when I only want Object1
:
Texts:(one AND two)
How can I solve this?
回答1:
If you need it that way, you can do:
from doc in docs
from text in doc.Tests
select new { Text = text }
Note that this is a fan-out index, and if you have a lot of texts per document, that require paying attention to the resources required.
回答2:
Your requirement aren't really compatible. What about this document?
{
"Texts" : [ "two one", "three four" ]
}
Do you want to find it when you search for one AND two
?
If not, just do a phrase search, if yes, you can't really do what you want without using fanout.
来源:https://stackoverflow.com/questions/27404639/search-each-element-in-string-array-for-multiple-terms-using-ravendb-and-lucene