。 3つの単語すべてが単一のレコードに表示されないので、結果は返されません。しかし、「ブラウン・キツネ」と「クイック・キツネ」のように、「クイックブラウン」は結果を返します。FullTextSearchオプションの言葉
単語がまたはすべての単語せずに結果を返すために、クエリ自体のために(ユーザが「速い茶色のキツネ*」キツネがオプションであることを示すために言うIE)のオプションであるので、入力されたクエリを構築する方法はありますか? 2つのクエリを実行しても問題ありません。すべての単語に対して最初のクエリを実行し、最初に行が返されなかった場合は、不完全な入力に対して再度クエリを実行します。
string query = String.Concat(@"
SELECT *
FROM FullTextSearches AS FT_TBL INNER JOIN
CONTAINSTABLE(FullTextSearches, (Title, Body), @SearchCondition) AS KEY_TBL
ON FT_TBL.Id = KEY_TBL.[KEY]
WHERE (FT_TBL.Accessibility = 0) OR ((FT_TBL.Accessibility & @Roles) > 0)
ORDER BY KEY_TBL.[RANK] DESC
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY");
SqlParameter paramSearch = new SqlParameter("SearchCondition", "\"" + searchTerm + "\"");
SqlParameter paramSkip = new SqlParameter("Skip", pageNumber * pageSize);
SqlParameter paramTake = new SqlParameter("Take", pageSize);
SqlParameter paramRoles = new SqlParameter("Roles", accessibility);
object[] parameters = new object[] { paramSearch, paramSkip, paramTake, paramRoles };
var results = db.FullTextSearch.SqlQuery(query, parameters);
常に学習します。
いつも、3番目の単語を除外するケースはありますか? – ngeksyo
これはどんな単語でもかまいません。理想的には、単語の一部だけを含むレコードよりも上位のすべての単語を含むレコードを返すのが理想的です。たとえば、Googleでは、すべての単語が見つからない場合、検索結果に「missing:[word]」と表示されます。私はそれを持っているわけではありません。ただWIBNIです。 – GeoffM