asp.net c# 允许用户使用多个术语搜索字符串
asp.net c# allowing users to search string using multiple terms
我正在尝试向我的应用程序添加搜索功能,这将允许某人输入几个词并在我的数据中搜索这些词。
做单个单词和短语很简单:
if (x.Title.ToUpper().Contains(tbSearch.Text.ToUpper()) || x.Description.ToUpper().Contains(tbSearch.Text.ToUpper()))
但是,如果有人搜索 "red car" 而标题是 "the car that is red",我该如何计算?我知道我可以在 SPACE 上拆分,然后搜索每个术语,但这似乎过于复杂,我还需要去掉非单词字符。
我一直在考虑使用正则表达式,但不确定它是否会按顺序或任何顺序搜索项目。
我想我基本上是想在我的应用程序中创建一个简单的 google 搜索。
我想你正在寻找这样的东西:
public static bool HasWordsContaining(this string searchCriteria, string toFilter)
{
var regex = new Regex(string.Format("^{0}| {0}", Regex.Escape(toFilter)), RegexOptions.IgnoreCase);
return regex.IsMatch(searchCriteria);
}
用法:
someList.Where(x=>x.Name.HasWordsContaining(searchedText)).ToList();
您是否考虑过使用合适的搜索引擎,例如 Lucene? Lucene 中的 StandardAnalyzer 使用 StandardTokenizer,它在标记化时处理(某些)特殊字符。例如,它将 "red-car" 拆分为标记 "red car",从而 "removing" 特殊字符。
为了在 Lucene 索引中搜索多个字段,您可以使用 MultiFieldQueryParser。
您可以为此使用 CONTAINSTABLE。您可以使用 SPROC 并传入搜索字符串。
USE AdventureWorks2012
GO
SELECT
KEY_TBL.RANK,
FT_TBL.Description
FROM
Production.ProductDescription AS FT_TBL
INNER JOIN
FREETEXTTABLE
(
Production.ProductDescription,
Description,
'perfect all-around bike'
) AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO
我正在尝试向我的应用程序添加搜索功能,这将允许某人输入几个词并在我的数据中搜索这些词。 做单个单词和短语很简单:
if (x.Title.ToUpper().Contains(tbSearch.Text.ToUpper()) || x.Description.ToUpper().Contains(tbSearch.Text.ToUpper()))
但是,如果有人搜索 "red car" 而标题是 "the car that is red",我该如何计算?我知道我可以在 SPACE 上拆分,然后搜索每个术语,但这似乎过于复杂,我还需要去掉非单词字符。
我一直在考虑使用正则表达式,但不确定它是否会按顺序或任何顺序搜索项目。
我想我基本上是想在我的应用程序中创建一个简单的 google 搜索。
我想你正在寻找这样的东西:
public static bool HasWordsContaining(this string searchCriteria, string toFilter)
{
var regex = new Regex(string.Format("^{0}| {0}", Regex.Escape(toFilter)), RegexOptions.IgnoreCase);
return regex.IsMatch(searchCriteria);
}
用法:
someList.Where(x=>x.Name.HasWordsContaining(searchedText)).ToList();
您是否考虑过使用合适的搜索引擎,例如 Lucene? Lucene 中的 StandardAnalyzer 使用 StandardTokenizer,它在标记化时处理(某些)特殊字符。例如,它将 "red-car" 拆分为标记 "red car",从而 "removing" 特殊字符。
为了在 Lucene 索引中搜索多个字段,您可以使用 MultiFieldQueryParser。
您可以为此使用 CONTAINSTABLE。您可以使用 SPROC 并传入搜索字符串。
USE AdventureWorks2012
GO
SELECT
KEY_TBL.RANK,
FT_TBL.Description
FROM
Production.ProductDescription AS FT_TBL
INNER JOIN
FREETEXTTABLE
(
Production.ProductDescription,
Description,
'perfect all-around bike'
) AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO