处理大数据时应该如何编写Elasticsearch搜索查询?

问题描述 投票:0回答:1

我有一个爬行平台(带有节点/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 万个文档上运行,这会占用大量资源吗? (是吗?)

是否有更好的方法来运行更高级的聚合搜索查询? 做一个处理评分的自定义微服务可能更好吗?

你们对此方法有什么更好的建议吗?

mongodb elasticsearch search bigdata
1个回答
0
投票

独特性

如果可能的话,我希望结果是唯一的域,...

查看collapse API,了解如何根据域字段获取不同的结果列表。

称重

还要以不同方式对字段进行加权,您可以在查询索引时使用 Elasticsearch 中的 boost 功能。以便根据文档相关性对结果进行排序。

注意:您可能需要以某种方式调整增强值以获得您期望的结果。

您还可以查看排名功能

© www.soinside.com 2019 - 2024. All rights reserved.