我有一个学习项目,关于识别文本内容必须使用JS。输入是一个段落,包括至少15行,并在100个文本文件中搜索3到5页。输出是哪个文本文件与输入文本内容相同。Elastic可以解决吗?或者你能推荐我一些解决方案吗?
rjee0c151#
我在https://web.archive.org/web/20210510013958/https://ambar.cloud/blog/2017/01/02/es-large-text/上找到了一个博客条目(链接在最初的帖子后就死了,所以使用Wayback Machine访问它),可以回答你的问题。有一个深入的例子与你的类似。ElasticSearch可以处理大型文档,并且仍然提供相当高的性能,但是对于像您这样的情况,正确设置索引非常重要。假设你有一个ElasticSearch文档,它的文本字段有3到5页的文本。当您尝试查询在大文本字段中包含段落的文档时,ElasticSearch将搜索所有文档及其字段(包括大文本字段)中的所有术语。在合并过程中,ElasticSearch会将所有找到的文档收集到内存中,包括大文本字段。在将结果构建到内存中后,ElasticSearch会尝试将这些大文档作为单个JSON响应发送。这在性能方面非常昂贵。ElasticSearch应该将大文本字段与其他字段分开处理。为此,在索引Map中,您应该为大文本字段设置参数store:true。这告诉ElasticSearch将字段与其他文档的字段分开存储。您还应该通过在索引设置中添加此参数来将大文本字段从_source中排除:
store:true
_source
_source: { excludes: [ "your_large_text_field" ] }
字符串如果您这样设置索引,大文本字段将与_source分开。查询大文本字段现在更有效,因为它是单独存储的,不需要将其与_source合并。总之,是的,ElasticSearch可以处理大型文本字段的搜索,并且通过一些额外的设置,它可以将搜索性能提高1100倍。
1条答案
按热度按时间rjee0c151#
我在https://web.archive.org/web/20210510013958/https://ambar.cloud/blog/2017/01/02/es-large-text/上找到了一个博客条目(链接在最初的帖子后就死了,所以使用Wayback Machine访问它),可以回答你的问题。有一个深入的例子与你的类似。
ElasticSearch可以处理大型文档,并且仍然提供相当高的性能,但是对于像您这样的情况,正确设置索引非常重要。
假设你有一个ElasticSearch文档,它的文本字段有3到5页的文本。
当您尝试查询在大文本字段中包含段落的文档时,ElasticSearch将搜索所有文档及其字段(包括大文本字段)中的所有术语。
在合并过程中,ElasticSearch会将所有找到的文档收集到内存中,包括大文本字段。在将结果构建到内存中后,ElasticSearch会尝试将这些大文档作为单个JSON响应发送。这在性能方面非常昂贵。
ElasticSearch应该将大文本字段与其他字段分开处理。为此,在索引Map中,您应该为大文本字段设置参数
store:true
。这告诉ElasticSearch将字段与其他文档的字段分开存储。您还应该通过在索引设置中添加此参数来将大文本字段从_source
中排除:字符串
如果您这样设置索引,大文本字段将与
_source
分开。查询大文本字段现在更有效,因为它是单独存储的,不需要将其与_source
合并。总之,是的,ElasticSearch可以处理大型文本字段的搜索,并且通过一些额外的设置,它可以将搜索性能提高1100倍。