问题标签 [full-text-indexing]
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.
algorithm - 在全文搜索(例如网络搜索)中使用多词查询的索引
我知道全文搜索的一个基本方面是使用倒排索引。因此,使用倒排索引,一个单词的查询变得很容易回答。假设索引的结构如下:
some-word -> [doc385, doc211, doc39977, ...](按排名降序排列)
要回答对该词的查询,解决方案只是在索引中找到正确的条目(这需要 O(log n) 时间)并从索引中指定的列表中显示一些给定数量的文档(例如前 10 个)。
但是返回匹配两个单词的文档的查询呢?最直接的实现如下:
- 将 A 设置为具有单词 1 的文档集(通过搜索索引)。
- 将 B 设置为具有单词 2 的文档集(同上)。
- 计算 A 和 B 的交集。
现在,第三步可能需要 O(n log n) 时间来执行。对于可能使查询响应缓慢的非常大的 A 和 B。但是像谷歌这样的搜索引擎总是在几毫秒内返回他们的答案。所以这不能是完整的答案。
一个明显的优化是,由于像 Google 这样的搜索引擎无论如何都不会返回所有匹配的文档,所以我们不必计算整个交集。我们可以从最小的集合(例如 B)开始,并找到足够的条目也属于另一个集合(例如 A)。
但是我们不能还有以下最坏的情况吗?如果我们将 A 设置为匹配一个常用词的文档集,并将 B 设置为匹配另一个常用词的文档集,那么可能仍然存在 A ∩ B 非常小的情况(即这种组合很少见)。这意味着搜索引擎必须线性地遍历 B 的所有元素 x 成员,检查它们是否也是 A 的元素,以找到符合这两个条件的少数元素。
线性并不快。而且您可以搜索两个以上的单词,因此仅使用并行性肯定不是整个解决方案。那么,这些案例是如何优化的呢?大型全文搜索引擎是否使用某种复合索引?布隆过滤器?有任何想法吗?
mysql - 如何使 MySQL 全文索引保持最新?
创建索引 MySQL
添加 FULLTEXT 索引后,如何使其保持最新状态?
以这种方式添加它:ALTER TABLE search_index ADD FULLTEXT(si_fulltext)
试图像这样更新它:
谢谢,乔
full-text-search - 我应该使用 Lucene.Net 进行 SQL Compact Edition 4 的全文搜索,还是有更好的选择?
我正在尝试为一个针对 SQL Compact Edition 4 数据库运行的小型博客创建一个全文搜索工具。
似乎几乎没有关于此的信息(尽管如果有人能证明我错了,我会很高兴),但据我所知,SQL CE 不支持正常的 SQL Server 全文索引。
我曾简要研究过使用Lucene.Net,但乍一看似乎相当复杂;这将是我最好的选择,还是我缺少一个更简单的解决方案?
search - Sphinx 和 CLucene 之类的索引/搜索引擎?
是否有任何其他索引/搜索引擎,如 sphinx 和 Clucene?
我想将我的文档分成几个部分并单独索引每个部分以供以后查找。
任何更轻(可扩展)的引擎?
干杯
mysql - 具有来自另一个表的 id 的全文索引
我有一个产品表,其中的行通过 category_id 连接到类别表中的一个或多行。如果我想让这些类别名称可搜索,是否有任何解决方案来指定要创建的类别表中名称的全文索引,该索引对应于产品表行中类别列中的 ID?
c# - 阿拉伯语文本文件搜索和索引
我正在开发一个电子图书馆项目(用于阿拉伯书籍)。一个程序,允许用户将他的书籍导入系统图书馆并针对他的图书馆执行搜索。系统向用户提供了一个用户可以稍后更新的基本图书馆(书籍集)。
为了处理搜索问题,我认为系统在数据库中有一个初始表,用于基本搜索关键字。每个搜索关键字都指向它在图书馆书籍中的位置。
当用户将新书导入图书馆时,就会出现问题。有两个步骤。首先根据新书搜索已经进入系统的关键字,以查找其中是否出现在书中并将其添加到系统中的位置。第二个是主要的绊脚石,是在新书中识别新的搜索关键字。
我认为非常糟糕和幼稚的想法是将新书分解为令牌,然后针对以前在图书馆中找到的所有书搜索每个令牌。
总而言之,如果有任何帮助(工具、库或数据库选项)或解决第二个问题的想法或整个系统的另一个想法,我很感激。真的尝试阅读和搜索很多解决方案,但徒劳无功。
非常感谢,
php - 使用 php 对大型字典执行搜索
目前我正在尝试使用 php 或 mysql 对大型词典执行文本搜索。直到现在我还没有找到最好的方法来做到这一点。例如,有一个用 Perl 编写的 Text:Scan 模块
http://search.cpan.org/~iwoodhead/Text-Scan-0.28/Scan.pm
这正是我需要的 php。如果您知道在 php 中执行此操作的某些方法,请与我分享这些知识!:)
感谢您的帮助!
django - 全文索引与 pattern_ops 索引
我正在使用 django,我的所有查询都是由 django 创建的,所以我没有手写查询...
我有一个表BillRecords
,其中有一个字段subscriberno
。在我的 django 过滤器中,我使用如下过滤查询:
由于subscriberno
客户说的可能是实数的缩短版...
该过滤器输出如下查询:
subscriberno
是一个字符字段,因为一些数字包含字母和一些特殊字符。
在我的数据库中,我的同事为该列创建了两个索引。
我想知道为这样的查询使用两个索引是合乎逻辑的。由于我们所有的 django 过滤器都使用icontains
并且应该像我上面写的那样创建查询。
Postgres对查询的分析如下:
所以,据我所知,没有使用索引。由于索引 usega 在数据插入和更新方面有成本,因此有两个没有使用的索引(据我从该分析中可以看出)似乎不合逻辑。
django 是否有机会为类似的icontanis
过滤器输出不同的查询?还是我的索引完全没用?
full-text-indexing - 为子字符串搜索建立索引?
我想在数十亿个字符串中进行一般的子字符串搜索。这个要求与一般的全文搜索有点不同,因为我想要一个查询“ubst”也可以点击“substr”。
Lucene 或 Sphinx 有能力做到这一点吗?如果不是,您认为最好的方法是什么?
sql-server - 如何使用 SQL Server 确定全文索引 varbinary 字段的长度?
我在 SQL Server 表中存储了许多二进制文件。我在该表上创建了一个全文索引,该索引还索引包含文档的二进制字段。我安装了适当的 iFilter,以便 SQL Server 也可以读取 .doc、.docx 和 .pdf 文件。
使用函数 DATALENGTH 我可以检索完整文档的长度/大小,但这也包括布局和其他无用信息。我想知道文件文本的长度。
使用 iFilters SQL Server 只能检索此类“复杂”文档的文本,但它也可以用于确定文本的长度吗?