Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET-如何正确分割字符串进行搜索?_Asp.net_Linq To Sql_Search_Key Value - Fatal编程技术网

ASP.NET-如何正确分割字符串进行搜索?

ASP.NET-如何正确分割字符串进行搜索?,asp.net,linq-to-sql,search,key-value,Asp.net,Linq To Sql,Search,Key Value,我正在尝试建立一个类似于Google的搜索(关于用双引号封装的精确匹配) 让我们用下面的短语作为例子 “短语搜索”单个术语[不同短语] 当前如果我使用以下代码 Dim searchTermsArray As String() = searchTerms.Split(New String() {" ", ",", ";"}, StringSplitOptions.RemoveEmptyEntries) For Each entry In searchTermsAr

我正在尝试建立一个类似于Google的搜索(关于用双引号封装的精确匹配)

让我们用下面的短语作为例子

“短语搜索”单个术语[不同短语]

当前如果我使用以下代码

        Dim searchTermsArray As String() = searchTerms.Split(New String() {" ", ",", ";"}, StringSplitOptions.RemoveEmptyEntries)

        For Each entry In searchTermsArray
            Response.Write(entry & "<br>")
        Next
其中,表1是一个包含一般信息的表,表2是一个类似于stackoverflow的“标签”表


有人能告诉我如何正确地捕获输入吗?

Regex是你的朋友。请参见

正则表达式是您的朋友。请看

你想做的并不是那么简单。实现“类似于谷歌的”搜索远远超出了解析搜索字符串的范围

我建议您不要重新发明轮子,而是使用生产就绪的解决方案,如or。它们处理解析和全文搜索


但是如果你只需要解析这种字符串,那么你应该真正考虑Pete所指的解决方案。

你想做的不是微不足道的。实现“类似于谷歌的”搜索远远超出了解析搜索字符串的范围

我建议您不要重新发明轮子,而是使用生产就绪的解决方案,如or。它们处理解析和全文搜索


但是如果你只需要解析这种字符串,那么你就应该真正考虑Pete所指的解决方案。

取决于你计划得到的效果如何,你可以考虑包含反讽的搜索文法/实现。p>


取决于你计划在获取中的想象力,你可以考虑包含反讽的搜索文法/实现。p>


搜索字符串解析是一个非常规问题。这意味着,虽然正则表达式可能会变得非常接近,但如果不使用专有扩展、构建一个无法维护的混乱表达式、留下令人讨厌的边缘案例,或者三者的某种组合,它就无法实现

相反,有三种正确的处理方法:

  • 使用第三方解决方案,如Lucene
  • 通过antlr之类的工具构建语法
  • 构建自己的状态机 对于这一级别的问题(假设搜索足够核心,足以让您自己实现它),我可能会选择选项3。当您意识到正则表达式本身就是如何设置状态机的指令时,这就更有意义了。你所做的就是把它直接构建到你的代码中。这将使您能够调整性能和特性,而无需在代码中添加更大的lexer组件

    请看我对这个问题的回答:


    我要做的是构建一个状态机来逐个字符解析字符串。这将是实现完全正确的解决方案的最简单方法,也应该产生最快的代码。

    搜索字符串解析是一个非常规问题。这意味着,虽然正则表达式可能会变得非常接近,但如果不使用专有扩展、构建一个无法维护的混乱表达式、留下令人讨厌的边缘案例,或者三者的某种组合,它就无法实现

    相反,有三种正确的处理方法:

  • 使用第三方解决方案,如Lucene
  • 通过antlr之类的工具构建语法
  • 构建自己的状态机 对于这一级别的问题(假设搜索足够核心,足以让您自己实现它),我可能会选择选项3。当您意识到正则表达式本身就是如何设置状态机的指令时,这就更有意义了。你所做的就是把它直接构建到你的代码中。这将使您能够调整性能和特性,而无需在代码中添加更大的lexer组件

    请看我对这个问题的回答:


    我要做的是构建一个状态机来逐个字符解析字符串。这将是实现完全正确的解决方案的最简单方法,也应该产生最快的代码。

    强烈要求对“类似于谷歌”发表尖刻评论。我只是以此作为参考点。我希望能够搜索包含在双引号中的多个单词,而不是将它们拆分成单个单词。强烈要求对“类似于谷歌”发表尖刻评论。我只是以此作为参考点。我希望能够搜索包含在双引号中的多个单词,而不是将它们拆分为单个单词。如果您真的想搜索类似于“谷歌搜索”的功能,请绝对推荐lucene.net。搜索是我应用程序的一个很小的部分。基本上,该网站是一个事件列表网站,我需要能够搜索关键字(如乐队或场馆名称-包括带空格的名称),但如果它们使用方括号,还可以通过标记进行过滤。好的。。。在研究了Lucene.NET之后,它似乎是适合我的解决方案。谢谢你的指导。如果你真的想要类似于“谷歌搜索”的搜索功能,请推荐lucene.net。搜索是我应用程序中很小的一部分。基本上,该网站是一个事件列表网站,我需要能够搜索关键字(如乐队或场馆名称-包括带空格的名称),但如果它们使用方括号,还可以通过标记进行过滤。好的。。。在研究了Lucene.NET之后,它似乎是适合我的解决方案。感谢您的指导。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。而此链接可能会回答问题
    phrase search     |  table1  
    single            |  table1  
    terms             |  table1  
    different phrase  |  table2