我正在尝试根据 ID 位于特定 ID 集合中的项目从集合中获取值。
我当前构建过滤器的代码是:
IEnumerable<string> IDList;
using (var enumerator = IDList.GetEnumerator())
{
if (enumerator.MoveNext() == false) return null; // empty collection
// take the first key
var key = enumerator.Current;
filter = Builders<MyClass>.Filter.Eq(p => p.Key, key);
// take all the other keys
while (enumerator.MoveNext())
{
var innerKey = enumerator.Current;
filter = filter | Builders<MyClass>.Filter.Eq(p => p.Key, innerKey);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我获取物品的代码是:
List<MyClass> values = new List<MyClass>();
using (var cursor = await MyCollection.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
values.AddRange(cursor.Current);
} …Run Code Online (Sandbox Code Playgroud) 是否可以选择通过索引设置或映射的某些更改按字母顺序对查询进行排序?
我知道有一个“排序”查询,但是删除了分数,并且我希望除了该术语的字母排序之外,还要考虑分数。
例如,如果结果“ A”和“ Z”的得分为2,而“ C”的得分为1,我希望顺序为:
一种
ž
C
这可能吗?
这是我当前的索引设置和映射:
{
"users": {
"settings": {
"index": {
"analysis": {
"filter": {
"shingle_filter": {
"max_shingle_size": "2",
"min_shingle_size": "2",
"output_unigrams": "true",
"type": "shingle"
},
"edgeNGram_filter": {
"type": "nGram",
"min_gram": "1",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete_query_analyzer": {
"filter": [
"standard",
"asciifolding",
"lowercase"
],
"tokenizer": "standard"
},
"autocomplete_index_analyzer": {
"filter": [
"standard",
"asciifolding",
"lowercase",
"shingle_filter",
"edgeNGram_filter"
],
"tokenizer": "standard"
}
}
},
"number_of_shards": "1",
"number_of_replicas": "1"
}
}
}
}
{ …Run Code Online (Sandbox Code Playgroud)