代码之家  ›  专栏  ›  技术社区  ›  Darren Greaves

在sphinx中将布尔字段索引为字符串

  •  0
  • Darren Greaves  · 技术社区  · 15 年前

    我有 a Ruby on Rails site 使用thinking sphinx搜索Postgres数据库。

    我正在搜索的表中的一个字段是布尔值。 当搜索查询中使用某个关键字时,我希望能够匹配该布尔值。

    举例说明:
    我的网站是为开发自己的黑白电影的人。
    我有一个菜谱表,人们描述他们如何制作电影。那张桌子上有一个布尔列,叫做“stand_developed”(冲洗胶片的方法)。
    我想返回当用户搜索单词“stand”时该字段为真的结果。

    我已经经历了 sphinx docs 如果可能的话还没有找到。

    我想我可以通过解析查询词和添加条件来破解控制器方法中的一些东西,但是有没有更干净的方法呢?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Paul D.    15 年前

    这就是我用thinkingsphinx搜索布尔字段所做的。通过 stand_developed 作为url参数和查询字符串,方法如下:

    1. 没有搜索的常规查询的URL 标准开发 http://yoursite.com/search?q=your_query_string
    2. 用于查询的URL stand_developed == TRUE http://yoursite.com/search?q=your_query_string&stand_developed=1
    3. 用于查询的URL stand_developed == FALSE http://yoursite.com/search?q=your_query_string&stand_developed=0

    然后,在控制器中,您将执行以下操作:

    if params[:stand_developed]  && params[:stand_developed].to_i == 1
      # perform query search with stand_developed == true
      @search_results = YourModel.search(params[:q], :with => {:stand_developed => true})
    elsif params[:stand_developed]  && params[:stand_developed].to_i == 0
      # perform query search with stand_developed == false
      @search_results = YourModel.search(params[:q], :with => {:stand_developed => false})
    else
      # perform general query search
      @search_results = YourModel.search(params[:q])
    end
    
        2
  •  1
  •   Darren    14 年前

    如果params[:search]包含文本“stand”,则可以从中进行搜索。表中不需要额外的列,这只是不需要的开销。

    if params[:search].downcase.include?('stand')
      Model.search params[:search], :with => {:stand_developed => true}
    else
      Model.search params[:search]
    end
    
        3
  •  0
  •   Darren Greaves    15 年前

    我现在想出一个解决办法。

    我试过我在问题中提到的“黑客”——解析“站”这个词,然后明确地搜索它(保罗戴维斯的答案的变体),但效果并不太好。

    我没有在我的问题中解释这一点(在我问的时候没有意识到完整的含义),但我需要它也匹配,如果用户在他们的配方描述中也使用了单词“stand”。

    因此,我试图让斯芬克斯在“如果展台开发是真的或笔记包含‘展台’”这一行添加一个条件,但我似乎找不到合适的语法。 它还必须处理其他任何搜索文本。

    最后,我在我的配方表中添加了一个额外的列,叫做“搜索标签”,如果用户在添加配方时选择了“stand-developed”,我会在其中添加单词“stand”。 然后我让斯芬克斯索引这个字段以及我的其他字段,所有的工作都非常完美。