【问题标题】:Exclude a FULLTEXT field in a sphinx search在 sphinx 搜索中排除 FULLTEXT 字段
【发布时间】:2014-07-29 22:11:02
【问题描述】:

这部分是为了全面了解 sphinx 的工作原理,部分是为了了解如何排除特定字段。

如果我有一个狮身人面像查询

 SELECT ID, Title, Description, Type, Category, Price, Date, Sales FROM table;

Title、Description 和 Type 被视为全文搜索,而 ID、Category、Price 和 Date 用于排序。

我假设 Sphinx 知道运行它的关键字搜索,基于 Title、Description 等都被指定为 FULLTEXT 并因此忽略 Price 等,因为它们不是 FULLTEXT?

也就是说……如果我想排除所有 FULLTEXT 项目并只搜索其中一个项目(如 Title)怎么办?

【问题讨论】:

    标签: sphinx


    【解决方案1】:

    回答您的其他问题,哪些字段是可搜索的......

    sql_query 中的第一列始终被视为文档 ID,之后 所有 列被自动假定为 fields。除非您明确要求将它们设为attributes,并带有sql_attr_* 定义。

    Sphinx 完全忽略了原始数据库列的 type。无论如何,所有值都作为字符串传输。


    提醒一下……

    • fields 可全文搜索。并且可以使用已经提到的字段限制运算符来控制特定查询使用哪些特定的。

    • attributes 按原样存储在索引中,不可全文搜索。但是它们可以用于过滤器,或者用于排序和分组。属性也可以包含在结果集中。

    (但请注意,您可以通过fieldstring attribute 创建一个列,以充分利用两者,通过sql_field_string

    【讨论】:

    • 哦哇......好吧,你是说除非我“告诉”它项目应该是属性,否则 Sphinx 会认为它是一个字段并搜索它?如果是这样,那是至关重要的信息。谢谢!!
    【解决方案2】:

    默认情况下,MATCH('whatever text') 匹配索引中的任何文本字段。您可以通过包含字段搜索运算符@(例如MATCH('@title whatever text'))将其限制为仅特定字段。要忽略所有字段,请从 WHERE 子句中省略 MATCH()

    【讨论】:

    • 你的语法有点错误。 @title,必须在要搜索的单词之前,因为该限制适用于 它之后的所有关键字,所以MATCH('@title whatever text')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多