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

0 投票
3 回答
20283 浏览

solr - Solr - 在不返回搜索结果的情况下获取构面计数

我只需要从 solr 返回方面计数。所以我基本上想搜索所有文档并返回构面计数,但我不想返回任何搜索结果。这可能吗?

谢谢

0 投票
1 回答
3496 浏览

solr - SOLR 的分面查询浏览器

你能推荐一个我可以指向 SOLR 索引的多面查询浏览器吗?理想情况下,这看起来像一个 Endeca 构建的 GUI,其中从索引中提取各种方面,用户单击一个,现在显示剩余项目的适用方面,最终在原始数据的一个子集中达到高潮. 对索引进行单独的 Lucene 查询很容易,但出于调试目的,我宁愿使用预构建的浏览器,也不愿使用自己的浏览器。

0 投票
1 回答
3403 浏览

solr - 过滤 solr facet 计数

鉴于以下情况:

我想在给定结果集的情况下获取按特定产品类型过滤的构面字段 product_id 的构面计数(为此,我使用过滤器查询等...)

请注意,我想要的是过滤构面计数:

  • 方面查询没有帮助,因为它引入了一个包含特定方面查询结果的列表。(过滤查询也不行)

    2921

  • Facet.prefix 做了我想要的那种过滤器,但我不知道如何在这种情况下使用它。

备注我想过滤与特定类别匹配的产品ID

0 投票
2 回答
2387 浏览

c# - 有人可以向我解释这个 GetCardinality 方法在做什么吗?

我一直在研究 Lucene.NET 的多面搜索,我在这里找到了一个很好的示例,它解释了相当多的内容,除了它完全忽略了检查位数组中项目的基数的功能。

谁能告诉我它在做什么?我不明白的主要事情是为什么按原样创建 bitsSetArray,它的用途以及所有 if 语句如何在 for 循环中工作。

这可能是一个很大的问题,但我必须先了解它是如何工作的,然后才能考虑在我自己的代码中使用它。

谢谢

0 投票
2 回答
6308 浏览

mysql - MySQL 和分面导航(按属性过滤)

我觉得这个问题可能已经被问了一千次了,所以如果它被回答了,我很抱歉。如果是这样,有人可以指出我正确的帖子/链接吗?

我想做的是为我的网站构建一个多面导航。它使用 MySQL,这是我正在使用的表的粗略草图:

我想要做的是在您处于某个类别时显示可用属性列表,允许您为每个属性选择一个或多个值。举个例子,看看 Office Depot 的这个页面:http ://www.officedepot.com/a/browse/binders/N=5+2177/

到目前为止,我已经使用了很多连接来过滤多个属性:

基本上a_options将返回那些产品的所有属性,这些产品是我使用a_select1和应用的过滤器的子集a_select2。因此,如果我使用 Office Depot 中的 Binders 示例,我想在为颜色选择蓝色或黑色并为尺寸选择“8.5 x 11”后显示所有可用属性。

然后我使用 PHP 代码删除重复项并将生成的属性排列到一个数组中,如下所示:

有没有办法可以加快查询速度或更有效地编写它?我在属性表(以及所有 ID 号)中设置了名称和值的索引。但是如果有人选择了几个属性,那么查询运行速度很慢。

提前感谢您的帮助,
Sridhar

0 投票
4 回答
9070 浏览

sql - 在关系数据库中高效实现分面搜索

我正在尝试使用多标签过滤实现分面搜索或标记。在分面导航中,仅显示非空类别,并且类别中也匹配已应用标准的项目数显示在括号中。

我可以使用 INNER JOIN 获取所有已分配类别的项目,并使用 COUNT 和 GROUP BY 获取所有类别中的项目数,但是我不确定它将如何扩展到数百万个对象和数千个标签。尤其是计数。

我知道有一些像Lucene + SOLR这样的非关系型解决方案,但我还发现了一些基于 RDBMS 的闭源实现,据说是像FacetMap.comEndeca软件这样的企业实力,所以必须有一个在关系数据库中执行分面搜索的有效方法。

有没有人有分面搜索的经验并可以提供一些提示?

缓存每个类别集的计数?也许使用一些可以更新计数器的智能增量技术?

编辑:

可以在此处找到分面导航的示例:弗拉门戈舞

目前我有标准的 3 表方案(项目、标签和 items_tags,如下所述:http ://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#toxi )加上一个表对于方面。每个标签都分配了一个方面。

0 投票
2 回答
2410 浏览

database-design - 用于处理动态分类的专用多面搜索引擎 - 仅有助于提高性能还是提高灵活性?

我一直在考虑使用类似 ebay 的分类法和依赖于特定产品类别的属性来建模典型的电子商务网站。

第一次尝试是在 EAV 和 Table Per Class db 继承建模之间进行选择。我选择后者是因为性能,但这意味着为每个特定(类别树中的叶子)产品类别创建专用表,并将特定类别属性(如电视的分辨率)建模为单独的列。

如果您需要将属性添加到现有类别或添加新类别,则此设置虽然高效,但并不灵活。对于每个此类更改,需要以下内容:

  • 更改/创建表
  • 按特定属性过滤此类类别的新表格
  • 用于生成用于搜索和过滤的数据库查询的新代码
  • 一些新的视图模型/DTO 和用于展示新类别产品的视图

为了应对这种复杂性,我认为需要在 xml 甚至 excel 文件中(甚至在应用程序之外)对这些属性进行某种元表示,以便在每次更改时都可以自动生成所有提到的代码(sql/orm 查询,应用程序代码、模板)。所以它可以帮助开发,但仍然需要测试和额外的部署。

那时我了解到 ebay 并没有真正使用关系数据库进行搜索,而且他们的分类非常灵活,可以很快添加新的叶子类别。此外,它们的类别可能不是在关系数据库中建模的分层树中的类别,而只是搜索属性(方面)。

在快速浏览了最有希望的专用分面搜索设置(单独的 Solr 实例)后,我不确定它是否可以帮助我灵活地应对分类变化,因为通常 Solr 只是以某种方式反映关系数据库,因此特定的类别属性仍然必须在 DB 中建模为 DBMS 元数据,例如。用于过滤属性的动态生成 UI 表单会很困难,除非:

1)我将使用 EAV fasion 将数据保存在 RDBMS 中,并通过使用 SOLR 搜索来克服其性能问题(但仍然存在 EAV 混乱、没有数据完整性执行等问题)

2)我会在 RDBMS 中只保留属性字典(即它们的名称和类型),并将特定属性值存储在 SOLR 中,使用它作为一种非关系数据存储,而不是搜索工具。我也不相信这个解决方案(即使它是可能的),因为应用程序将与 solr 紧密耦合(即产品版本管理员 CRUD 将直接与 SOLR 交互)。

你怎么认为?您认为对于任何类型的(高性能)分类法灵活性代码生成是不可避免的吗?你会怎么处理?也许只是为了代码生成目的,在数据​​库中以 EAV 方式的一些单独的数据字典?我想我也可以使用 MongoDB 之类的东西,但是 UI 代码生成(运行时与否)仍然需要某种元数据。

这里有很多问题,但我不想把它分解成更小的问题,因为在处理更大类的此类问题时,我对通用设计方法感兴趣。

0 投票
3 回答
5172 浏览

solr - 如何在多值方面字段中同时在 Solr 中搜索空白方面?

我有一个应用程序,用户可以在其中挑选汽车零件。他们选择他们的车辆,然后选择车辆属性作为方面。选择车辆后,他们可以选择发动机尺寸等方面,例如,缩小结果列表。问题是,并非所有文档都有引擎大小(在 Solr 中它是一个空值),因为它对所有部分都无关紧要。例如,发动机尺寸对于空气滤清器来说并不重要。因此,即使用户选择 3.5L 作为他们的发动机尺寸,我仍然想在屏幕上显示空气过滤器作为用户可以选择的可能部分。我做了一些搜索,以下方面查询完美运行:

此查询将匹配 3.5 或匹配引擎大小字段没有值的记录(没有值意味着它无关紧要,它适合汽车)。完美的...

问题:我最近将车辆属性字段设置为多值字段,因此我可以将每个部分的属性存储为一个列表。然后我对它应用了刻面,它工作得很好。但是,当我应用上面提到的查询时,问题就出现了。虽然选择引擎大小方面将显示的文档数量缩小到仅具有该引擎大小的文档,但引擎大小具有空值(即“”)的记录(我也使用单词记录来表示文档)没有出现。上面的相同查询不适用于多值方面,就像 enginesize 是单值字段时一样。

例子:

我正在寻找的是一个查询,当我对 3.5 的引擎大小进行分面搜索时,它将拉回上面的文档 1 和 3。第一个文档(引擎安装)匹配,因为它包含我正在寻找的一个多值字段“enginesize”中的值(其中一个字段包含 3.5)。<str>但是,由于空值,没有返回空气过滤器的第三个文档。我根本不想返回第二个文档,因为它与构面值不匹配

我基本上想要一个查询,该查询将匹配给定方面的空字符串值并匹配实际值,因此我得到了返回的两个文档。

是否有人查询会返回文档 1 和文档 3(发动机支架和空气滤清器),但不返回发动机螺栓文档?

我尝试了以下但没有成功(包括这个问题最顶部的那个):

我使用 CSV 文件导入了上面的数据,我设置了字段keepEmpty=true. 我尝试在生成 CSV 文件时手动在字段中插入一个空格(这会给你<str> </str>,而不是之前的 ,然后重试查询。这样做,我得到了以下结果:

是否有人有适用于任何一种情况的查询,无论我有一个空格作为空白值还是根本没有值?

0 投票
1 回答
1727 浏览

lucene - Solr/Lucene:索引构面值

例如,假设我有以下方面:

颜色

  • 红色 (7825)
  • 橙色 (2343)
  • 绿色 (843)
  • 蓝色 (5412)

在我的数据库中,颜色是一个表,每种颜色都有一个主键和一个名称/值。

在使用 Solr/Lucene 进行索引时,在我看到的所有示例中,值都是索引的,而不是主键。因此,如果我按红色过滤,我会得到如下内容:

http://www.example.com/search?color=Red

我想知道,在显示方面值时索引主键并从数据库中检索值是否明智?所以我会得到这样的东西:

http://www.example.com/search?color=1

“1”代表红色的主键。我想知道我是否应该采用这种方法,因为我的许多方面的值经常变化,但主键保持不变。此外,索引需要与数据库同步。

有没有这方面的经验?您认为这将如何影响性能?

提前致谢!

0 投票
1 回答
5349 浏览

ruby-on-rails - 如何使用 Sunspot 设置具有多对多关系的构面搜索?

我之前没有实现过搜索功能,感觉有点卡住了。我有一个 Sunspot 搜索功能,可以根据关键字查找结果 - 这很好用 - 但我现在想实现多选方面功能,但我什至不知道如何设置基本方面搜索。

我有一个多对多的关系(在轨道上不是在现实生活中):

Class People has_many :skills, :through => 经验(反之亦然等)

在控制器中

这是我无法工作的基本示例。它会生成此错误:

如何创建指向 :skill_ids 的链接

我想我一定是在模型中遗漏了一些参考——但我找不到任何例子可以参考关系的 ID。我发现的大多数示例在使用构面功能时都使用了该模型中已经存在的列。

  • 我怎样才能使基本实现工作?
  • 我将如何在视图中使用它 - 我是否必须调用 hits.facet 并迭代技能?代码会是什么样子来显示这个?
  • 我将如何选择多个方面进行搜索?
  • 我应该把它放在社区维基吗?

感谢您的时间!