public void TestGetContentSearchStr() { Assert.Multiple(() => { Assert.IsEmpty(Generator.GetContentSearchStr(null, false)); Assert.IsEmpty(Generator.GetContentSearchStr(" ", true)); Assert.AreEqual($"{nameof(CodeSource.Content)}:A", Generator.GetContentSearchStr("A", false)); Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:A", Generator.GetContentSearchStr("A", true)); }); }
public void TestGetContentSearchQuery_NormalQuery() { var query = Generator.GetContentSearchQuery(new SearchRequest { CaseSensitive = false, Content = "ABC*", }); Assert.NotNull(query); Assert.AreEqual("Content:abc*", query.ToString()); query = Generator.GetContentSearchQuery(new SearchRequest { CaseSensitive = true, Content = "ABC*", }); Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:ABC*", query.ToString()); query = Generator.GetContentSearchQuery(new SearchRequest { CaseSensitive = false, Content = "Abc~2", }); Assert.AreEqual($"Content:abc~2", query.ToString()); query = Generator.GetContentSearchQuery(new SearchRequest { CaseSensitive = true, Content = "Abc~2", }); Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:Abc~2", query.ToString()); query = Generator.GetContentSearchQuery(new SearchRequest { CaseSensitive = true, Content = " ", }); Assert.IsNull(query); query = Generator.GetContentSearchQuery(new SearchRequest { CaseSensitive = false, Content = null, }); Assert.IsNull(query); }
protected string GetContentSearchStr(string content, bool caseSensitive) { if (!string.IsNullOrWhiteSpace(content)) { if (caseSensitive) { return($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:{content}"); } return($"{nameof(CodeSource.Content)}:{content}"); } return(string.Empty); }
void AddPhaseQueryWithoutWildcard(BooleanQuery query, string queryStr, string propertyName) { queryStr = $"\"{queryStr}\""; if (propertyName == nameof(CodeSource.FilePath)) { query.Add(GetQueryFromStr($"{propertyName}:{queryStr.Replace("\\", "\\\\").Replace(ReplaceEncodedDoubleQuotes, EncodedDoubleQuotes).Replace(EncodedSpecialPrefix, SpecialPrefix)}", false), Occur.MUST); } else { if (propertyName == CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))) { query.Add(GetQueryFromStr($"{propertyName}:{queryStr.Replace(ReplaceEncodedDoubleQuotes, EncodedDoubleQuotes).Replace(EncodedSpecialPrefix, SpecialPrefix)}", true), Occur.MUST); } else { query.Add(GetQueryFromStr($"{propertyName}:{queryStr.Replace(ReplaceEncodedDoubleQuotes, EncodedDoubleQuotes).Replace(EncodedSpecialPrefix, SpecialPrefix)}", false), Occur.MUST); } } }
public void TestGetSearchQuery_NormalQuery() { var query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = false, Content = "ABC*", FileName = "EFG", }); Assert.NotNull(query); Assert.AreEqual("+FileName:efg +Content:abc*", query.ToString()); query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = true, Content = "ABC*", FileName = "EFG", }); Assert.AreEqual($"+FileName:efg +{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:ABC*", query.ToString()); query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = false, Content = "Abc~2", FileName = "EFG", }); Assert.AreEqual($"+FileName:efg +Content:abc~2", query.ToString()); query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = true, FileName = "EFG", Content = "Abc~2", }); Assert.AreEqual($"+FileName:efg +{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:Abc~2", query.ToString()); query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = true, FileName = "EFG", }); Assert.AreEqual($"FileName:efg", query.ToString()); query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = true, Content = "Abc~2", }); Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:Abc~2", query.ToString()); query = Generator.GetSearchQuery(new SearchRequest { CaseSensitive = true, Content = "Abc~2", CodePK = "123" }); Assert.AreEqual($"{nameof(CodeSource.CodePK)}:123", query.ToString()); }
void AddPhaseQuery(BooleanQuery query, string queryStr, bool caseSensitive, string propertyName) { if (!string.IsNullOrWhiteSpace(queryStr)) { queryStr = queryStr.Replace(SpecialPrefix, EncodedSpecialPrefix); if (caseSensitive && propertyName == nameof(CodeSource.Content)) { propertyName = CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content)); } queryStr = queryStr.Replace(EncodedDoubleQuotes, ReplaceEncodedDoubleQuotes).Replace(DoubleQuotes, ReplaceEncodedDoubleQuotes); if (!string.IsNullOrWhiteSpace(queryStr)) { if (queryStr.Contains(WildcardAsterisk)) { queryStr = queryStr.Replace(EncodedAsterisk, ReplaceEncodedAsterisk); if (!queryStr.Contains(WildcardAsterisk)) { AddPhaseQueryWithoutWildcard(query, queryStr.Replace(ReplaceEncodedAsterisk, EncodedAsterisk), propertyName); } else { queryStr = queryStr.Replace(WildcardAsterisk, ReplaceWildcardAsterisk).Replace(ReplaceEncodedDoubleQuotes, DoubleQuotes).Replace(ReplaceEncodedAsterisk, WildcardAsterisk); var words = new List <string>(); using (var tokenStream = LucenePoolLight.Analyzer.GetTokenStream(propertyName, queryStr)) { var termAttr = tokenStream.GetAttribute <ICharTermAttribute>(); tokenStream.Reset(); while (tokenStream.IncrementToken()) { words.Add(termAttr.ToString()); } } if (words.Count > 0) { var phraseWords = new List <string>(); foreach (var word in words) { if (word.StartsWith(ReplaceWildcardAsterisk)) { // TODO: Support searching for "ABC * EDF" throw new NotImplementedException("Not support wildcard searching at top or wildcard only searching"); } else { phraseWords.Add(word.Replace(WildcardAsterisk, EncodedAsterisk).Replace(ReplaceWildcardAsterisk, WildcardAsterisk).Replace(EncodedSpecialPrefix, SpecialPrefix)); } } query.Add(CreatePhraseQuery(phraseWords, propertyName), Occur.MUST); } } } else { AddPhaseQueryWithoutWildcard(query, queryStr, propertyName); } } } }