solr过滤器实际上是如何实现的?

2023-12-27

我对查询处理的理解是否正确?

  1. 从缓存中获取 DocSet 或第一个过滤器查询将创建 OpenBitSet 或 SortedVIntSet 的实现并缓存它
  2. 从缓存中获取 DocSet 或所有其他过滤器创建它们的 DocBitSet 实现,并将与原始 (该代码的效率取决于 DocSet 的第一个实现的实现)
  3. 我们使用 Lucene 过滤器+查询搜索(在所有交叉点之后)对 MainQuery 和最终 DocSet 进行跨越(其效率取决于第一个 DocSet 实现)
  4. 我们应用后置过滤器(成本> 100 && 缓存== false)作为原始查询的AND

因此,性能将取决于第一过滤器因为对于小型查询 SortedIntSet 更有效,而对于大型 BitSet 则更好。 我对么?

问题的第二部分: DocSet 有两个主要实现 - HashDocSet 和 SortedIntDoc,每个交集实现都会迭代第一个过滤器中的所有实例,并检查它是否也在第二个 DocSet 中...这意味着我们必须按大小对过滤器进行排序,首先是最小的。 是否可以控制缓存过滤器的顺序(成本仅适用于非缓存过滤器)?


这听起来不错。欲了解更多信息,请查看SolrIndexSearcher#getProcessedFilter http://grepcode.com/file/repo1.maven.org/maven2/org.apache.solr/solr-core/4.0.0-ALPHA/org/apache/solr/search/SolrIndexSearcher.java#SolrIndexSearcher.getProcessedFilter%28org.apache.solr.search.DocSet,java.util.List%29.

因此,性能将取决于第一个过滤器,因为对于小型查询 SortedIntSet 更有效,而对于大 BitSet 则更好。我对么?

这更多的是空间效率问题而不是速度问题。一个排序的 int[] 花费 4 * nDocs 字节,而一个位集花费 maxDoc / 8 字节,这就是为什么 Solr 在集合中的文档数量

问题的第二部分:DocSet 有两个主要实现 - HashDocSet 和 SortedIntDoc

SortedIntDocSet 的问题是它不支持随机访问,而 HashDocSet 的问题是它无法按顺序枚举文档 ID,而这对于评分可能很重要。这就是为什么 Solr 几乎在任何地方都使用 SortedIntDocSets,并在需要随机访问时创建临时 HashDocSet(例如,查看 JoinQParserPlugin 或 DocSlice#intersect)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

solr过滤器实际上是如何实现的? 的相关文章

  • MySQL 5.6 InnoDB 全文搜索

    我意识到 MySQL 5 6 仍处于测试阶段 但是有人有使用新的 InnoDB FTS 引擎的经验吗 它与狮身人面像之类的东西相比如何 谢谢 贾森 从未使用过 Sphinx 但在大约 170k 行的 Innodb 表上尝试过 MySQL 5
  • solr索引嵌套文档

    solr支持嵌套文档吗 有没有更好的方法来实现这种文档
  • 本地/离线网站“站点”的全文搜索[重复]

    这个问题在这里已经有答案了 可能的重复 通过 javascript 对 CD Rom 上的静态 HTML 文件进行全文搜索 https stackoverflow com questions 1357173 full text search
  • 在具有多个 Web 服务器的现有 .NET / SQL Server 堆栈上实施 Lucene

    我想考虑使用 Lucene 为我当前管理的网站提供全文搜索解决方案 该网站完全基于 SQL Server 2008 C NET 4 技术构建 我要索引的数据实际上非常简单 每个记录只有几个字段 并且只有其中一个字段实际上是可搜索的 我不清楚
  • Solr 4.0 中的 BaseTokenFilterFactory 去哪儿了?

    用于创建您自己的标记和字符过滤器的 Solr 文档说明如下 http wiki apache org solr AnalyzersTokenizersTokenFilters Specifying an Analyzer in the sc
  • apache solr:group by 产生的数据总和

    我们有一个要求 需要按特定字段对记录进行分组 并获取相应数字字段的总和 前任 select userid sum click count from user action group by userid 我们尝试使用 apache solr
  • 将solr 1.4索引升级到solr 3.3?

    我有一个使用 apache solr 1 4 构建的现有索引 我想在 3 3 版本中使用这个现有索引 正如您所知 索引格式在 3 x 之后发生了变化 那么如何才能做到这一点呢 我已经使用 Luke 将现有索引 即 1 4 版本 导出为 XM
  • Django 全文搜索优化 - Postgres

    我正在尝试利用 Django v2 1 和 Postgres 9 5 创建一个地址自动完成功能的全文搜索 但性能目前不适合自动完成 我不明白逻辑我得到的绩效结果背后 就信息而言 该表相当大 有 1400 万行 我的型号 from djang
  • 如何添加到 OrientDB 中的空间索引?

    我正在使用工作室的 OrientDB 2 0 我使用文档中的代码成功创建了 Lucene 空间索引 CREATE class Place extends V CREATE property Place name string CREATE
  • 使用 gin 索引和 sqlalchemy 返回排名搜索结果

    我为全文搜索设置了 GIN 索引 我想获取与搜索查询匹配的记录列表 按排名排序 记录与搜索查询的匹配程度 对于结果 我只需要记录及其列 不需要用于排序的实际排名值 我有以下查询 它运行良好并从我的 postgresql 数据库返回预期结果
  • Solrcloud Zookeper 设置:等待 4000ms 后未找到注册的领导者,集合:c1 切片:shard2

    我使用 solr 4 10 3 我通过 java 中的嵌入式 jetty 服务器启动 solr 我正在尝试使用 2 个分片 领导者 配置 solrcloud 我有一个外部动物园管理员设置 我在启动 solr 时指向动物园管理员实例 如下所示
  • Google 自定义搜索优化以获取最新结果

    我在我的网站上使用谷歌自定义搜索引擎 我对此自定义搜索有两个改进 细化1 在我的博客上搜索 细化2 搜索我朋友的博客 但我需要第三次改进 搜索两个网站的最新结果 或过去 24 小时的结果 我可以在细化中添加一些可以做到这一点的运算符吗 或者
  • MySQL 全文搜索之谜

    我们的网站上有一个使用 MySQL 全文搜索的简单搜索 但由于某种原因 它似乎没有返回正确的结果 我不知道这是否是 Amazon RDS 我们的数据库服务器所在的位置 或我们请求的查询的某种问题 这是数据库表的结构 CREATE TABLE
  • cursorMark是无状态的以及它如何解决深度分页

    作为指定here https cwiki apache org confluence display solr Pagination of Results光标标记是无状态的 但我不明白它是如何解决无状态的深度分页问题的 solr 是否按唯一
  • 如何使用 lucene 查询找到空的 Solr 文档字段

    我有一些这样的文件
  • MultiFieldQueryParser 正在从首字母缩略词中删除点

    我再次发布这个问题 因为我的查询没有得到答复 我正在使用 Lucene 开发图书搜索 api 用户可以搜索标题或描述字段包含 C F A 的书籍 我正在使用 StandardAnalyzer 以及停用词列表 我使用 MultiFieldQu
  • 我可以以编程方式配置 PostgreSQL 以不消除全文搜索中的停用词吗?

    我正在使用 PostgreSQL 全文搜索来进行项目 其中传统停用词 a the if 等 应该被索引和可搜索 这不是默认行为 例如 我可能希望我的用户找到查询 to be or not to be 的结果 The 文档 http www
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • MySQL 可选的带有 MATCH 的 LEFT JOIN

    我有以下查询 它对 MySQL Innodb 数据库中同一搜索词的两个不同表中的两列执行全文搜索 SELECT Id MATCH tb1 comment tb2 comment AGAINST search term IN BOOLEAN

随机推荐