问题标签 [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.

0 投票
6 回答
22685 浏览

php - strpos() 多针?

我正在寻找像 strpos() 这样的函数,它有两个显着差异:

  1. 能够接受多针。我的意思是成千上万的针。
  2. 在大海捞针中搜索所有出现的针并返回一个起始位置数组。

当然,它必须是一种有效的解决方案,而不仅仅是通过每根针的循环。我搜索了这个论坛,也有类似的问题,比如:

但他们都不是我要找的。我使用 strpos 只是为了更好地说明我的问题,可能为此目的必须使用完全不同的东西。

我知道Zend_Search_Lucene并且我很感兴趣它是否可以用来实现这一点以及如何(只是一般的想法)?

非常感谢您的帮助和时间!

0 投票
1 回答
392 浏览

php - MySQL 查询在 3 列中搜索 MATCH?

我为列创建了 FULLTEXT 索引:City, Group and Text称为city_group_text_comparator

如何做一个简单的查询来查找所有 3 个字符串?

我试过这个:

它如何排序结果?

谢谢

0 投票
2 回答
115 浏览

html - 不索引部分 HTML

有什么方法可以限制 HTML 的索引以增加页面内容的相关性?例如,从机器人中排除菜单等。我记得很久以前看到过一些特殊的标签,但我再也找不到信息了。

搜索引擎如何支持此类方法(Google/Bing)?

0 投票
1 回答
163 浏览

sql - SQL Server全文索引不返回所有数据

在我的表中,我有一列,即publicationDate发布日期设置为NVarChar存储在如下列中的数据模型:

当我使用以下 SQL 从 SQL 获取查询时,我已在此表上创建了全文索引:

它刚刚返回:

但不返回2008-10-23

那么我怎样才能得到所有包含的数据2008呢?

0 投票
4 回答
11942 浏览

sql - Oracle:带条件的全文搜索

我创建了一个 Oracle Text 索引,如下所示:

然后我可以执行以下操作:

但是假设我们在这个表中有另一列,比如group_id,我想改为执行以下查询:

使用上述索引,Oracle 将不得不搜索所有包含 的项目,'blah'然后检查它们的所有group_ids。

理想情况下,我宁愿只搜索带有 的项目group_id = 43,所以我想要一个这样的索引:

有点像普通索引,因此可以为每个group_id.

有没有办法在 Oracle 中做这样的事情(如果这很重要,我正在使用 10g)?

编辑(澄清)

考虑一个有 100 万行和以下两列的表,A以及B,都是数字。假设有 500 个不同的值A和 2000 个不同的值B,并且每一行都是唯一的。

现在让我们考虑select ... where A = x and B = y

据我所知,一个单独的索引在 上A进行索引搜索,这将返回 500 个不同的行,然后对这些行进行连接/扫描。在任何情况下,至少要查看 500 行(除了数据库很幸运并尽早找到所需的行。BB

虽然索引(A,B)更有效,但它会在一次索引搜索中找到一行。

放置单独的索引group_id和我认为的文本只会给查询生成器留下两个选项。

(1) 使用group_id索引,并扫描所有结果行中的文本。
(2) 使用文本索引,并扫描所有结果行以查找group_id.
(3) 使用两个索引,并进行连接。

而我想要:

(4) 使用(group_id, "text")索引查找特定下的文本索引,group_id并扫描该文本索引以查找我需要的特定行/行。不需要扫描和检查或加入,就像在(A,B).

0 投票
1 回答
570 浏览

mysql - MySQL 什么时候重建 FTS 索引?

如果您想使用MySQL 全文搜索功能,您可以在类型为 VARCHAR 的字段上定义全文索引。由于行是插入和更新的,mysql 必须保持索引是最新的。我的问题是:MySQL 什么时候重建 FTS 索引?

  • A) 在影响索引的 INSERT 或 UPDATE 发生后立即。
  • B) 当第一个 SELECT 运行需要最近受 UPDATE 或 INSERT 影响的索引时。
  • C) 别的东西。

不必要的背景信息:我的经验似乎认为选项 B。这是对的吗?我问是因为我一直在经历突然的随机慢查询,这些查询执行全文搜索,我不知道为什么有些慢而不是其他的。我的预感是,如果他们正在等待 mysql 重建 FTS 索引,查询可能会很慢,但我不知道 mysql 是否是这样工作的。随机慢查询的示例(通常相同的查询在一秒钟内运行),慢日志中没有慢 UPDATE 或 INSERT:

注意 Lock_time。我在慢速日志中看不到任何其他 INSERT 或 UPDATE,所以我不确定它在等待什么。这就是为什么我猜它可能正在等待 FTS 索引重建?

0 投票
2 回答
6986 浏览

java - Java的全文搜索解决方案?

有大量不同种类的实体:

任务是实现这个集合的全文搜索。通过全文搜索,我的意思是我只需要获取包含我正在寻找的子字符串的实体(我不需要知道确切的属性、该子字符串所在位置的确切偏移量等)。在当前实现中,Entity接口有一个方法matches(String)

每个实体类都根据其内部实现它:

我相信这种方法真的很糟糕(尽管它有效)。每次我有一个新集合时,我都在考虑使用 Lucene 来构建索引。索引是指内容-> id映射。内容只是我正在考虑的所有领域的一个微不足道的“总和”。因此,Entity1内容将是field1()和的串联field2()。我对性能有些怀疑:构建索引通常是一项相当昂贵的操作,所以我不确定它是否有帮助。

你有什么其他的建议?

澄清细节:

  1. Set<Entity> entities = ...是〜10000个项目。
  2. Set<Entity> entities = ...不是从数据库中读取的,所以我不能只添加where ...条件。数据源非常重要,所以我无法解决它的问题。
  3. Entities应该被认为是短篇文章,因此某些字段可能高达 10KB,而其他字段可能约为 10 字节。
  4. 我需要经常执行此搜索,但查询字符串和原始集每次都不同,所以看起来我不能只建立一次索引(因为实体集每次都不同)。
0 投票
1 回答
1902 浏览

mysql - MyISAM 上的全文索引真的很慢

我有一张桌子

其中有大约 10 万条记录。

该表每小时更新一次,其中包含大约 8k 条记录的 LOAD DATA INFILE。

锁定表的时间约为 30 秒。这对应于我制作的时间

我的问题是 30 秒真的很长。该表被查询 5 次/秒,这使得队列达到 30 x 5 = 150 。因为我们的最大连接限制设置为 100,mysql 服务器开始拒绝一些传入连接。

我们计划将来在这个表中至少有 100 万行,我想这不会变得更快。

我能做些什么来减少 mysql 用于更新索引的时间吗?

0 投票
3 回答
2115 浏览

search - lucene 怎么这么快计算文档的交集?

允许这样做的存储和搜索的内部结构是什么?就像在细节中一样?

例如,我有一百万个文档与一个词匹配,还有一百万个文档与 AND 查询的第二个词匹配。lucene 怎么这么快就给我top k了?

它是否按照每个学期增加文档 ID 的顺序存储文档?然后,当两个词条的文档必须相交时,它会在两个集合中查找第一个公共的 k 个文档,方法是在一次遍历中增量地迭代它们。

或者,它是否使用较大文档数组中的简单无序散列集来查找公共文档?

还是根据用户询问的文档数量、与单个术语匹配的文档数量等因素,是否使用了这两种(或可能更多)类型的交叉策略?

任何可以指出文档数组合并细节的文章将不胜感激。

编辑:感谢您的信息。现在说得通了。跳过列表很神奇。我将更深入地研究它以获得清晰的理解。

0 投票
0 回答
264 浏览

mysql - XML 解析、填充数据库和文本索引

我正在尝试通过解析 XML 文件并将解析后的值直接放入数据库来填充数据库。我有大约 1000 个 XML 文件和大量文本数据。我想在填充数据库时使用全文索引,为此我使用 mysql 文本索引。我想知道在填充数据库时进行索引还是先填充数据库然后对其进行索引是一个好主意?因为我认为解析单个文件并填充数据库需要一天的时间。