搜索弹性搜索以特定字符串结尾的 ID
Search elastic search for Ids ending with specific string
我摄取了这种简化格式的文档:
public class Document
{
public string Id { get; set; }
}
我可以 loop/scroll 使用此方法处理所有文档:
client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(100)
.MatchAll()
.Scroll(scrollTimeout)
)
;
是否可以只关注 ID 以特定字符串结尾的文档 - 例如: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))
)
)
)
;
请注意,这适用于其他字段。所以我目前的直觉是,像这样的东西对 IDs 不起作用。
Filip Cordas 建议使用正则表达式。这也不行:
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$")
)
)
)
;
我摄取了这种简化格式的文档:
public class Document
{
public string Id { get; set; }
}
我可以 loop/scroll 使用此方法处理所有文档:
client.Search<Document>
(
scr => scr.Index(IndexName)
.From(0)
.Size(100)
.MatchAll()
.Scroll(scrollTimeout)
)
;
是否可以只关注 ID 以特定字符串结尾的文档 - 例如: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))
)
)
)
;
请注意,这适用于其他字段。所以我目前的直觉是,像这样的东西对 IDs 不起作用。
Filip Cordas 建议使用正则表达式。这也不行:
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$")
)
)
)
;