问题标签 [text-search]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 从 2 个表中填充用于 Oracle Text 搜索的列
我正在研究 Oracle Text 搜索的好处,目前正在研究从多个(相关)表中收集搜索文本数据,并将数据以一对多的关系存储在较小的表中。
考虑这两张简单的桌子,房子和居民,从来没有任何无人居住的房子:
我想编写 SQL,用来自 INHABITANT 的文本更新 HOUSE.Search_Text 列。现在因为这是一对多,SQL 需要为内部每个匹配的行整理 INHABITANT 中的数据,然后合并数据(逗号分隔)并更新 Search_Text 字段。
完成后,HOUSE.Search_Text 上的 Oracle Text 搜索索引将返回与搜索条件匹配的 HOUSE,我可以相应地查找 INHABITANT。
当然,这是一个非常简化的示例,我想从多个列中提取数据并跨两个表中的字段进行全文搜索。
在同事的帮助下,我们得到了:
返回:
一些问题:
- 这是返回此数据的有效查询吗?我有点担心不同的。
- 这是跨多个文本字段使用 Oracle Text 搜索的正确方法吗?
- 如何使用上述结果更新 House.Search_Text?我想我需要一个相关的子查询,但不能完全解决。
- 创建一个只包含 House_ID 和 Search_Text 的新表,而不是更新 House 会更有效吗?
node.js - MongoDB全文搜索:溢出排序阶段缓冲数据使用
我正在尝试在我的 node(express.js) 应用程序中实现 mongo 文本搜索。
这是我的代码:
在大型数据集上执行文本搜索时出现以下错误:
MongoError:执行程序错误:溢出排序阶段缓冲数据使用量 33554558 字节超出内部限制 33554432 字节
我知道 MongoDB 最多可以对 32MB 数据进行排序,并且可以通过为我们将用于排序集合的字段添加索引来避免此错误。但在我的情况下,我正在对集合进行排序textScore
,我不确定是否可以为该字段设置索引。如果没有,是否有任何解决方法?
注意:我知道关于 SO 有类似的问题,但这些问题中的大多数都没有textScore
作为排序标准,因此我的问题是不同的。
java - 在可能发生重叠的字符串数组中查找字符串索引
我在编写子字符串搜索的变体时遇到了一些麻烦。本质上,目标是编写一种可以执行子字符串搜索的方法,但源数据位于字符串数组而不是一个字符串中。
我环顾四周,找不到任何人能够优雅地解决这个问题。
考虑一些输入数据,例如:
现在假设我想编写一个方法,该方法可以返回目标字符串出现的第一个位置的一对。这对表示目标出现的源数组中字符串的第一个索引及其在目标开始的那个字符串中的索引。
基于 0 的索引的示例:
我知道这将涉及三个 for 循环,但我不确定如何处理边缘情况,即目标字符串在源数组中占用多个字符串。
mongodb - 在聚合框架中使用文本搜索时的 MongoDB 索引优化
我们正在 MongoDB 之上构建一个简化版本的搜索引擎。
样本数据集
我们希望避免使用“offset-limit”对结果进行分页,为了做到这一点,我们基本上是通过修改查询的“where/match”子句来使用“seek 方法”,以便能够使用索引而不是遍历集合以获取所需的结果。有关“寻求方法”的更多信息,我强烈建议您阅读http://use-the-index-luke.com/blog/2013-07/pagination-done-the-postgresql-way
搜索引擎通常按分数排序结果,并按后代顺序更新日期。为此,我们在聚合管道中使用文本搜索功能,如下所示。
第一页
第二页
最后一页
请注意我们如何按分数、updDate 和 id 对结果进行排序,以及在第二个匹配阶段我们如何尝试使用文档的分数值、更新日期和最后的 id 对它们进行分页。
索引创建考虑到文本索引前缀字段不能涵盖文本查询,请参阅问题https://jira.mongodb.org/browse/SERVER-13018,尽管我不确定这是否适用于我们的案例。
由于“executionStats”和“allPlansExecution”模式在聚合框架中不起作用,请参阅https://jira.mongodb.org/browse/SERVER-19758我不知道 MongoDB 如何尝试解析查询。
由于索引交集不适用于文本搜索,请参阅https://jira.mongodb.org/browse/SERVER-3071(在 2.5.5 解决)和http://blog.mongodb.org/post/87790974798/efficient -indexing-in-mongodb-26作者所说的
在阅读了https://docs.mongodb.org/manual/MongoDB-indexes-guide-master.pdf的 3.4 节(文本搜索教程)和 3.5 节(索引策略)后,没有得出任何明确的结论。
那么从文本搜索的角度来看,对该集合进行索引的最佳索引策略是什么?
第一个匹配阶段的一个索引和第二个(分页)匹配阶段的另一个索引?
考虑到两个匹配阶段的字段的复合索引?
以上都不是?
谢谢
mongodb - 如何使用 pymongo 创建索引
我想在我的 Mongo DB 的特定字段中启用文本搜索。我想在 python (-> pymongo) 中实现这个搜索。当我按照互联网上的说明进行操作时:
我收到以下错误消息:
在 pymongo 中创建索引是否有不同/更好的方法?
mongodb - 如何在 pymongo 的索引字段中查询多个单词?
当我想执行索引文本搜索时,我使用以下命令:
我现在想知道如何查询几个单词。我已经尝试将查询设置为,query = ['word1', 'word2']
但这不起作用。
c++ - 使用 MongoDB 的 C++ 驱动程序使用文本分数进行全文搜索
如何使用 MongoDB 的 C++ 驱动程序执行全文搜索?我觉得我非常接近这里的解决方案,但缺少一些微不足道的东西。
这是我的代码:
输出:
(查询与 MongoDB shell 中的查询不完全一样——它应该是两个单独的 JSON 对象)
错误:
我也试过(同样的错误):
和(同样的错误):
这(同样的错误):
任何人都可以帮忙吗?我已经没有想法了。
c++ - 搜索字符串以查找字符串列表中出现的任何单词
我想知道如何在 C++ 中搜索字符串以查找字符串列表中 ANY 的第一个实例。一种全字版本std::string::find_first_of()
:“在字符串中搜索与其参数中指定的任何字符匹配的第一个字符”。
我想要的东西会在字符串中搜索与提供的列表/数组中的任何单词匹配的第一个单词。需要明确的是,我不想在数组中搜索字符串的实例。我想在一个字符串中搜索一个数组中的某个实例。
我的目标是能够取一个句子,并删除列表中的所有单词。例如,如果我给它列表{"the" "brown", "over"};
和句子"the quick brown fox jumped over the lazy dog"
,我希望它输出," quick fox jumped lazy dog"
。如果我愿意,我希望能够给它一个甚至 100 个单词的列表;我需要它是可扩展的。
我能想到的唯一解决方案是在我的文本块上循环使用std::find(stringArray[0])
,while
并保存找到该单词的索引,然后将所有这些放在另一个for
循环中并对数组中的每个单词执行此操作,保存每个单词的索引到一个巨大的列表中。然后可以选择对该列表进行数字排序,最后遍历并删除该列表中某个位置的每个单词。
我真的希望有一个功能或更简单的方法来做到这一点,因为我的解决方案似乎很困难而且很慢,特别是因为我需要在许多不同的字符串上多次使用它来遍历 50,000 个字符的所有句子文本块。任何更好的优化都将是首选。
text-search - java:如何在mongo中限制分数结果
我有这个 mongo 查询(java):
它执行文本搜索并按分数排序。我对文档中的不同字段给出了不同的 wiehgt,现在我只想检索分数低于 10 的结果。
有没有办法将该条件添加到查询中?
这没有用:
如果唯一的方法是使用聚合 - 我需要一个 mongoTemplate 示例。
换句话说
如何将以下 mongo shell 聚合命令转换为 java spring 的 mongoTemplate 命令?在任何地方都找不到如何将聚合的 match() API 与 $text 搜索组件一起使用($text 在几个不同的字段上被索引):
谢谢!
emacs - 如何在缓冲区中搜索包含给定值的数字范围
我有一个缓冲区,其中包含一些 lldb 输出,其中包含很多地址范围,例如[0x00007fff60489000-0x00007fff604c0000)
.
给定一个地址(也是十六进制),我将如何搜索包含该地址的范围?我认为这将需要一些自定义的 elisp 代码。