c# - 搜索以特定字符串结尾的 Id 的弹性搜索
问题描述
我摄取了这种简化格式的文档:
public class Document
{
public string Id { get; set; }
}
我可以使用这个循环/滚动所有文档:
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$")
)
)
)
;
解决方案
推荐阅读
- r - 强制图例中的级别顺序与双向条形图中的顺序相同
- java - org.springframework.batch.item.ItemStreamException:无法在第二个 api 调用上初始化阅读器
- javascript - 视频元素静音在 Chrome 中返回 false,即使属性设置为“静音”
- html - 测量或删除字母上方的空间
- r - 如何在 R 数据框中对多个对象进行分类
- laravel - 在 Laravel 5.4 中注册后向用户发送欢迎电子邮件
- java - java在DTO中将日期类型转换为字符串格式而不需要迭代
- c# - 添加样式后抛出异常
- css - 如何在 HTML5 中设置部分的第一段样式?
- javascript - d3.scaleOrdinal 没有返回正确的范围值