问题标签 [sphinx]

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 投票
5 回答
823 浏览

search - 为什么应该(或不应该)搜索查询只返回文档 ID?

因此,对于一个新项目,我正在为电子商务网站构建一个系统。我们的想法是从供应商那里进口产品,而不是将它们直接插入到我们的目录中,我们会将所有信息存储在一个暂存区。每个供应商都有自己的阶段(即数据库中的表),然后我会将多个暂存区域扁平化为单个实体(当前为单个表,但稍后可能会转换为 Sphinx 或 Solr)。然后,我们的经销商将能够搜索暂存产品的相关字段(名称和描述),并显示匹配的产品列表,然后选择将这些产品推送到实时目录中。搜索将查询单个表(展平的暂存区域)。

我的设计要求仅在单个展平表中存储可搜索和可过滤的字段 - 例如名称、描述、供应商 ID、供应商产品 ID 等。搜索查询将仅返回匹配项目的 ID 和用于的类 (supplier_id)确定产品来自哪个暂存区。

另一位高级工程师认为扁平化的搜索表应该包括其他元字段(不会被搜索),但可以在将产品从舞台“推送”到实时目录时使用。他还认为查询应该返回所有这些其他信息。

我对仅在展平表中具有可搜索字段并让搜索仅返回可用于获取有关产品的所有其他必要元数据的类/id 对的感觉非常强烈(简单的 select * from class_table where id in (1,2 ,3))。

我的部分理由是,这将使以后更容易将扁平表从数据库切换到像 sphinx 或 solr 这样的搜索服务器,并且不必仅仅因为搜索的实现发生更改而更改其余代码。

我在正确的道路上吗?我如何说服其他工程师为什么只保留可搜索字段并只返回 ID 很重要?或者更具体地说,为什么搜索应用程序应该只返回对象的 ID?

0 投票
1 回答
1101 浏览

php - 查找最近的有房源(企业)的城市

我已经在 Sphinx 中有两个数据源:

使用 PHP Sphinx API,我已经按名称搜索匹配的城市,并在纬度/经度的 25 英里范围内搜索列表,没有任何问题,但现在我需要“加入”它们......我想成为能够:

a) 按名称搜索城市时,仅返回 25 英里范围内有房源的城市;b) 当我查看一个城市的结果(已知纬度/经度)时,拉出 25 英里范围内有房源的 3 个最近城市其中

有没有办法建立一个单一的狮身人面像搜索来完成这两个查找?

根据下面的评论链进行编辑:

我已经更新了我的城市表以包含一个 Point 类型的字段点并在其上创建了一个空间索引:

但是,当我尝试更新数据以从纬度/经度数据中创建点时,出现错误:

我的语法是在这里还是我遇到了其他问题?

0 投票
1 回答
1361 浏览

php - 查找没有 sql_attr_multi 属性值的文档(Sphinx)

在我的狮身人面像源配置中,我有一个像这样的属性:

查询狮身人面像索引时,是否可以只获取没有类别属性的记录?作为一个笨拙的修复,我在数据库上执行了一个查询以查找所有潜在的类别 ID,然后从 Sphinx 结果中排除这些属性:

这可行,但似乎应该有更好的方法。

0 投票
2 回答
367 浏览

mysql - 将结果扔进mysql的蜘蛛

希望使用 Sphinx 进行站点搜索,但并非我的所有站点都在 mysql 中。而不是重新发明轮子,只是想知道是否有一个开源蜘蛛可以轻松地将其发现扔到 mysql 数据库中,以便 Sphinx 可以索引它。

感谢您的任何建议。

0 投票
4 回答
7959 浏览

mysql - 不使用 auto_increment id 的 Sphinx

我目前正在计划创建一个包含来自不同来源的各种数据的大型数据库(2+ 百万行)。我想避免围绕 auto_increment ids 构建数据库,以帮助防止复制的同步问题,并且因为插入的每个项目都将具有保证是唯一的字母数字产品代码 - 在我看来,使用它更有意义。

我正在寻找一个搜索引擎来索引这个数据库,Sphinx 看起来相当吸引人,因为它的设计围绕索引关系数据库。但是,查看各种教程和文档似乎表明数据库设计依赖于一种或另一种形式的 auto_increment 字段,并且文档中的一个相当大胆的声明说文档 ID 必须仅为 32/64 位整数,否则会中断。

有没有办法在没有 auto_increment 字段作为 id 的情况下让 Sphinx 索引数据库?

0 投票
4 回答
1374 浏览

php - php,中俄文搜索

最终,我正在创建一个使用三种语言的网站:英语、俄语和中文。我希望如果我在应用程序和数据库中使用 UTF-8,输入输出不会有任何问题(会有吗?)

但其中最可怕的部分是搜索。它应该足够酷。应该是全文,应该是索引等等。希望它会理解形态学,使用词干提取等。

首先,我查看了 Zend_Search_Lucene,但我从http://framework.zend.com/issues/browse/ZF/component/10021意识到它有中文问题。:(

现在我在想狮身人面像。它支持英语和俄语词干。我不确定它对中文有多好,我不知道添加对它的支持对我来说有多难。http://www.sphinxsearch.com/forum/view.html?id=1554是一线希望,但作为没有经验的 Sphinx 用户,我认为我不明白那里所说的内容。


所以,

有没有人在这种“与语言无关”的搜索方面有任何经验,可以与我分享吗?

你能给我一些东西来测试搜索吗?作为一个母语为俄语的人,对英语有一些基本的了解,我可以自己测试俄语和英语搜索,但我什至不知道这张中国图片的哪些部分是单词。请给我一些中文字符串以将它们放入索引和一些具有预期结果的查询!

0 投票
2 回答
2801 浏览

python - 如何在 django-sphinx 下自动重建 Sphinx 索引?

我刚刚设置了 django-sphinx,它运行良好。我现在可以搜索我的模型并获得惊人的结果。一个问题是我必须使用 indexer 命令手动构建索引。这意味着每次我添加新内容时,我都必须手动点击命令行来重建搜索索引。这是不可接受的。

我可以制作一个定期自动运行索引器命令的 cron 作业,但这远非最佳。在 cron 再次运行之前,不会索引新数据。此外,由于我的站点没有经常添加数据,因此索引器大部分时间都会不必要地运行。

如何设置它,以便在可搜索的 django 模型中添加或修改数据时,Sphinx 索引将自动重建自身?

0 投票
1 回答
15010 浏览

mongodb - 使用狮身人面像搜索与 mongodb 作为数据源

我们决定将 mongodb 用于某些 Web 应用程序(而不是 mysql),但希望继续使用 sphinx 来索引/搜索存储在 mongodb 中的所有数据。由于 mongodb object-id 是默认的哈希值——我们希望保留它——现在使用 sphinx 存在一个问题。正如狮身人面像文档中所说:

所有文档 ID 必须是唯一的无符号非零整数(32 位或 64 位,取决于构建时间设置)。

所以......解决这个问题的最佳方法是什么......我们如何将mongodb object-id映射到非零整数(并返回)?

更新

casey 的答案是正确的研究方向,但事实证明,字符串属性在当前的开发版本中仅可用于 sql 数据源。对于 xmlpipe,有必要将补丁应用到结帐源。更多信息可以在sphinx 论坛中找到。

0 投票
2 回答
1246 浏览

mysql - sphinx 和一对多关联

我见过的狮身人面像搜索示例并没有真正使用连接。如果我有这样的模式(一本书有多个评论),

我应该给 sphinx 什么样的查询,以便我可以搜索评论中的单词,它会返回相应的书。如果我使用常规的内部连接,则每个评论将是一个文档,并且与网站上可见的内容不对应(单页包含书籍信息和所有评论)。

你有什么建议?我是否应该为搜索文档创建一个非规范化表并使用呈现的页面作为输入,例如:

并针对书籍和评论的每次更改进行修改?

0 投票
1 回答
706 浏览

ruby-on-rails - 狮身人面像返回过时的结果

环境:

Memcached、Rails 2.2.2 + cache_money、Sphinx + Thinking sphinx

以下会产生陈旧的结果:
- 添加记录;mysql 包含正确的数据
- 此时记录可能缓存在内存中
- 重新索引 sphinx
- sphinx 使用正确的数据返回正确的结果
- 编辑记录
- 缓存正确无效,mysql 包含正确的更新数据
-再次重新索引 sphinx
- sphinx 现在已经过时了

重新索引 sphinx、清除 memcached 和/或编辑有问题的记录都没有效果。一起禁用缓存层(cache_money 加上 memcached)也没有效果。