从一个文本框进行高级搜索

Posted

技术标签:

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

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

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

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

到目前为止我的想法:

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

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

【问题讨论】:

【参考方案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”之前的空间。我会做更多的谷歌研究。谢谢:)

以上是关于从一个文本框进行高级搜索的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:高级搜索

用正则表达式regexp进行高级搜索数据

Extjs - 高级搜索表单

高级 Google 搜索引擎查询的 URL 格式

Lucene 高级搜索

Vue前端的封装的高级搜索条件,like,=,or,and,not null,后端进行统一的接收