【问题标题】:Advanced Search from one textbox从一个文本框进行高级搜索
【发布时间】:2012-09-25 07:59:40
【问题描述】:

我想在我的程序中实现高级搜索功能,但我不想创建这样的界面(这只是示例):

我想要的只是一个文本框,用户可以在其中编写这样的查询(假设它是一个“联系人”应用程序):

contact_name:john,michael,-michelle age:<=20,=>15 location:usa

到目前为止我的想法:

首先,用空格分解文本,然后用冒号分解。因此,第一项将是“搜索字段”,第二个数组将是要查找的值。但是像&lt;=-* 这样的运算符会出现问题。它们不是固定宽度,所以我不知道我应该为运算符“substr”多少字符。

顺便说一句:如果这个搜索操作有一个通用名称,如“基于令牌的搜索”或类似的名称,我可以搜索一个已经完成工作的库。

【问题讨论】:

    标签: php search advanced-search


    【解决方案1】:

    我猜你可以在callbacks 中使用一些正则表达式。

    类似:

    "`[a-z]+:([*<=>])([a-z],)+ `U"
    

    这只是一个例子,您必须完成才能满足您的需求。

    祝你好运。

    【讨论】:

    • 我已经用我能想象到的一切搜索了谷歌,但可能有像 Doctrine's Parser 之类的库或类似的库?
    【解决方案2】:

    您必须使用自动建议来构建类似于高级搜索(也许)的东西来构建用户查询:这样您就可以更好地控制查询结构。
    如果你试图解析徒手查询,你会让自己对查询误解持开放态度:

    您是否认为以下查询有效
    contact_name:john,michael,-michelle age:&lt;=20,=&gt;15 location:usa
    和下面的表示一样无效吗?
    contact_name:john, michael,-michelle age:&lt;=20,=&gt;15 location:usa
    (在任意位置插入任意数量的空格)

    尝试搜索“查询构建器”或类似的东西,但考虑到该实现是非常特定于应用程序的,我不确定您是否会发现任何有用的东西。

    【讨论】:

    • 嗯,谢谢你的回答。如果查询生成器给我“michael”,我想我可以“修剪”“michael”之前的空间。我会做更多的谷歌研究。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多