我有一个爬行平台(带有节点/javascript的微服务),我在其中索引了我爬行的文档(每个爬行的url/子页面是我的Mongodb中的单个文档),我想找到基于以下内容有效搜索我的文档的最佳方法关键词和句子。
我想以最有效的方式使用一组关键字或句子运行查询,然后获取前 100 个结果(如果不满足阈值,则返回更少的结果)。如果可能的话,我希望结果是唯一的域,这样我就不会得到 100 个文档作为同一域的结果。
主要目标是,根据搜索结果(如果分数足够好)生成潜在客户,其中我从域的每个爬网网址/子页面中合并联系信息等(在另一个微服务中,与 Elasticsearch 无关)。因此,如果我可以获得前 100 个已爬网文档,我就可以根据搜索知道哪些域具有良好的前景。
我现在有大约 300 万个文档(网址),每个文档都包含我想要对其进行排名并返回的字段,并且这些文件应该具有权重。例如
域名(最有价值) 网址(倒数第二) 内容(小价值) 标题(中等价值)
这是当前的“crawled_data”索引:
{
"mappings": {
"properties": {
"content": {
"type": "text"
},
"headers": {
"type": "nested",
"properties": {
"h1": {
"type": "keyword"
},
"h2": {
"type": "keyword"
},
"h3": {
"type": "keyword"
},
"h4": {
"type": "keyword"
},
"h5": {
"type": "keyword"
},
"h6": {
"type": "keyword"
}
}
},
"domain": {
"type": "keyword"
},
"url": {
"type": "keyword"
}
}
}
}
我应该使用函数查询吗?或者考虑到它需要在所有超过 300 万个文档上运行,这会占用大量资源吗? (是吗?)
是否有更好的方法来运行更高级的聚合搜索查询? 做一个处理评分的自定义微服务可能更好吗?
你们对此方法有什么更好的建议吗?
如果可能的话,我希望结果是唯一的域,...
查看collapse API,了解如何根据域字段获取不同的结果列表。
还要以不同方式对字段进行加权,您可以在查询索引时使用 Elasticsearch 中的 boost 功能。以便根据文档相关性对结果进行排序。
注意:您可能需要以某种方式调整增强值以获得您期望的结果。
您还可以查看排名功能。