问题标签 [acts-as-ferret]

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 投票
0 回答
47 浏览

ruby-on-rails - act_as_ferret 没有搜索结果

我在盒子模型上有这条线

当然,box table 有一个名为 model 的字段。

这是搜索操作或目录控制器

这就是搜索视图,这是 _search_box.html.erb

这是search.html.erb

似乎正确,但搜索总是返回 0 个结果。

0 投票
1 回答
97 浏览

ruby-on-rails - ferret /acts_as_ferret :指定字段应为空白

这与基于 lucene 的搜索引擎 Ferret 有关。 https://github.com/dbalmain/ferret

假设我有一个包含两个字段的模型,myfield1并且myfield2. 我想获取 myfield 等于“foo”的记录,或者 myfield 具有null(或空字符串)但 myfield2 设置为“foo”的记录。

我不想获取具有例如 myfield = "bar" 和 myfield2 = "foo" 的记录。所以,这并不像说“myfield:foo || myfield2: foo”那么简单——如果 myfield 为空,我只想查看 myfield2。

等效的 sql 是where (myfield = 'foo') or ((myfield is null or myfield = '') and myfield2 = 'foo'). 与此等效的雪貂搜索字符串是什么?

以下不起作用,但它是我所追求的那种事情的一个例子:

谢谢,马克斯

顺便说一句,如果它是相关的,我在 Rails 上的 ruby​​ 中使用acts_as_ferret,但我认为我的问题真的只是与雪貂搜索字符串有关。我正在使用雪貂宝石,v=0.11.6

编辑:下面有点肮脏的解决方案,仍然想知道是否可以仅使用上面的查询字符串。

好的,我通过添加一个新方法“myfield_blank”解决了这个问题:

然后添加myfield_blank => {},到我的acts_as_ferret 索引定义中。所以现在我可以说

这行得通,但是就像我说的那样,我仍然想知道是否可以在查询中执行此操作,而无需创建新字段:如果我想为许多不同的字段执行此方法,则这种方法将是不可接受的。谢谢

0 投票
1 回答
24 浏览

ruby-on-rails - 类宏上的模型条件

可以对模型设置条件,例如:

这是有效的红宝石代码,但我想知道这是否可行?

0 投票
0 回答
34 浏览

ruby-on-rails - Rails 2.2.2 - 雪貂服务器不断死亡

多年来,我们一直在 rails 2.2.2 应用程序中使用 ferret,它很好(有一些怪癖)。

但是,现在,每当我尝试在本地使用它时,它都会死掉。我可以启动它,然后一旦 Rails(在我的本地服务器或控制台中)尝试进行雪貂搜索,雪貂服务器就会消失。

我能得到的唯一反馈来自log/acts_as_ferret.log,其中有:

在我启动它之后,我可以看到ps它正在运行。但是当我启动rails控制台时,雪貂死了。我从 ferret 开始script/ferret_server start,而这又只需要一个文件:

它没有输出任何内容,因此在尝试要求该文件时不会出现异常。

我无法理解是什么突然使它像这样失败,尽管我一直在对其中一个模型的索引内容进行一些更改。我可以恢复这些更改,但问题并没有消失。

我不知道如何调试这个......有人可以帮忙吗?谢谢

编辑:我尝试删除我的索引/开发文件夹的所有内容,认为那里可能有一些奇怪的东西,但它没有帮助。

0 投票
0 回答
32 浏览

ruby - 删除记录后删除悬挂的雪貂索引条目

我正在使用 ActsAsFerret,它是基于 Ruby 的Ferret搜索引擎的 Rails 包装器。

有时,似乎使用 SQL 删除了一条记录,而不是通过 ActiveRecord(即 record.destroy),当这种情况发生时,在 Ferret 索引中留下了一个索引条目。

我可以在这个例子中看到它,其中 School #136574 留下了一个悬挂索引条目lazy: “:

这会导致一个严重的问题,因为如果您尝试对结果执行任何操作,它会执行 School.find(id) 并且您会遇到上述异常。

我做到了School.rebuild_index,认为这会解决它,但它没有。

可以解决它 - 似乎调用.collect结果已被覆盖以将它们转换为相应的对象(导致异常),我可以执行以下操作:

这确实有效,但速度很慢,而且有点让人头疼。

有谁知道删除悬挂索引记录的方法?