Я принял документы этого упрощенного формата:
public class Document
{
public string Id { get; set; }
}
Я могу циклически прокручивать / прокручивать все документы, используя это:
client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(100)
.MatchAll()
.Scroll(scrollTimeout)
)
;
Можно ли сосредоточиться только на документах, где Идентификаторы заканчиваются указанной строкой c - например, bla?
Я пробовал это:
return client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(100)
.MatchAll()
.Scroll(scrollTimeout).Query(q => q
.Match(m => m
.Field(f => f.Id)
.Query("bla")
)
)
)
;
Также пробовал:
return client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(100)
.MatchAll()
.Scroll(scrollTimeout).Query(q => q
.MoreLikeThis(sn => sn
.Fields(ff => ff
.Field(f => f.Id)
)
Использование подстановочного знака также не работает:
return client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(100)
.MatchAll()
.Scroll(scrollTimeout).Query(q => q
.Wildcard(c => c
.Name("named_query")
.Boost(1.1)
.Field(p => p.Id)
.Value("bla")
.Rewrite(MultiTermQueryRewrite.TopTermsBoost(10))
)
)
)
;
Обратите внимание, что это работает с другими полями. Итак, мое текущее предположение состоит в том, что что-то подобное просто не работает для идентификаторов.
Филип Кордас предложил использовать регулярные выражения. Это также не работает:
return client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(1000)
.MatchAll().Scroll(scrollTimeout).Query(q => q
.Regexp(c => c
.Field(p => p.Id)
.Value("bla$")
)
)
)
;
По запросу Russ Cam. Я попробовал следующее, которое также не работало:
var searchResponses = client.Search<Document>
(
scr => scr.Index(indexName)
.From(0)
.Size(1000)
.Query(q => q.Regexp(c => c
.Field(p => p.Id)
.Value("bla$")
)
)
)
;