NEST 7:如何获取每个文档的出现次数?
NEST 7: How to get occurrence number for each document?
我正在使用 NEST 7.0 和 C# 运行 使用 Fluent DSL 样式搜索 Elasticsearch 存储的查询。我使用 MultiMatch 在多个字段中按传递的字符串值进行搜索:
queryContainer &= Query<Document>.MultiMatch(m => m.Fields(fields)
.Query(searchParams.SearchValue)
.Type(TextQueryType.MostFields));
对于我收到的每个文档,它都是_score 和源数据。我都可以从 Response.Hits.
得到
但是如何获得每个文档的搜索值的出现次数?我想收到这样的东西:
搜索值:"search"
搜索字段:标题、描述
结果:
- Doc1:出现 5 次
- Doc2:出现 0 次
- Doc3:出现 3 次
- Doc4:出现 1 次
...
在此先感谢您的帮助!
弹性搜索中没有直接的方法。
可以做的最接近的事情是使用 multi-term vectors
查询
POST /index51/_mtermvectors
{
"ids" : ["1", "2"], --> Ids of all documents (_id)
"parameters": {
"fields": [
"text"
],
"term_statistics": true
}
}
它将return所有文档的列表,其中包含字段中每个单词的统计信息
结果:
{
"docs" : [
{
"_index" : "index51",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"found" : true,
"took" : 3,
"term_vectors" : {
"text" : {
"field_statistics" : {
"sum_doc_freq" : 7,
"doc_count" : 3,
"sum_ttf" : 7
},
"terms" : {
"another" : {
"doc_freq" : 2,
"ttf" : 2,
"term_freq" : 1,
"tokens" : [
{
"position" : 0,
"start_offset" : 0,
"end_offset" : 7
}
]
},
"test" : {
"doc_freq" : 3,
"ttf" : 3,
"term_freq" : 1,
"tokens" : [
{
"position" : 2,
"start_offset" : 16,
"end_offset" : 20
}
]
},
"twitter" : {
"doc_freq" : 2,
"ttf" : 2,
"term_freq" : 1,
"tokens" : [
{
"position" : 1,
"start_offset" : 8,
"end_offset" : 15
}
]
}
}
}
}
},
{
"_index" : "index51",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"found" : true,
"took" : 2,
"term_vectors" : {
"text" : {
"field_statistics" : {
"sum_doc_freq" : 7,
"doc_count" : 3,
"sum_ttf" : 7
},
"terms" : {
"test" : {
"doc_freq" : 3,
"ttf" : 3,
"term_freq" : 1,
"tokens" : [
{
"position" : 0,
"start_offset" : 0,
"end_offset" : 4
}
]
}
}
}
}
}
]
}
可以使用 scroll api
获取所有文档的 ID
我正在使用 NEST 7.0 和 C# 运行 使用 Fluent DSL 样式搜索 Elasticsearch 存储的查询。我使用 MultiMatch 在多个字段中按传递的字符串值进行搜索:
queryContainer &= Query<Document>.MultiMatch(m => m.Fields(fields)
.Query(searchParams.SearchValue)
.Type(TextQueryType.MostFields));
对于我收到的每个文档,它都是_score 和源数据。我都可以从 Response.Hits.
得到但是如何获得每个文档的搜索值的出现次数?我想收到这样的东西:
搜索值:"search"
搜索字段:标题、描述
结果:
- Doc1:出现 5 次
- Doc2:出现 0 次
- Doc3:出现 3 次
- Doc4:出现 1 次
...
在此先感谢您的帮助!
弹性搜索中没有直接的方法。 可以做的最接近的事情是使用 multi-term vectors
查询
POST /index51/_mtermvectors
{
"ids" : ["1", "2"], --> Ids of all documents (_id)
"parameters": {
"fields": [
"text"
],
"term_statistics": true
}
}
它将return所有文档的列表,其中包含字段中每个单词的统计信息
结果:
{
"docs" : [
{
"_index" : "index51",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"found" : true,
"took" : 3,
"term_vectors" : {
"text" : {
"field_statistics" : {
"sum_doc_freq" : 7,
"doc_count" : 3,
"sum_ttf" : 7
},
"terms" : {
"another" : {
"doc_freq" : 2,
"ttf" : 2,
"term_freq" : 1,
"tokens" : [
{
"position" : 0,
"start_offset" : 0,
"end_offset" : 7
}
]
},
"test" : {
"doc_freq" : 3,
"ttf" : 3,
"term_freq" : 1,
"tokens" : [
{
"position" : 2,
"start_offset" : 16,
"end_offset" : 20
}
]
},
"twitter" : {
"doc_freq" : 2,
"ttf" : 2,
"term_freq" : 1,
"tokens" : [
{
"position" : 1,
"start_offset" : 8,
"end_offset" : 15
}
]
}
}
}
}
},
{
"_index" : "index51",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"found" : true,
"took" : 2,
"term_vectors" : {
"text" : {
"field_statistics" : {
"sum_doc_freq" : 7,
"doc_count" : 3,
"sum_ttf" : 7
},
"terms" : {
"test" : {
"doc_freq" : 3,
"ttf" : 3,
"term_freq" : 1,
"tokens" : [
{
"position" : 0,
"start_offset" : 0,
"end_offset" : 4
}
]
}
}
}
}
}
]
}
可以使用 scroll api
获取所有文档的 ID