我希望我的Lucene查询包含类似于:
的内容companyNam:梅赛德斯卡车
它将在companyName字段中对字符串“mercedes trucks”进行完全匹配。
companyName是一个未加密的字段,但任何带空格的字段都会返回null结果..
new TermQuery(new Term("companyName", "mercedes trucks"));
如果涉及空间,则始终结果为0。否则我的程序工作正常。
答案 0 :(得分:9)
使用像这样的PhraseQuery:
//create the query objects
BooleanQuery query = new BooleanQuery();
PhraseQuery q2 = new PhraseQuery();
//grab the search terms from the query string
string[] str = Sitecore.Context.Request.QueryString[BRAND_TERM].Split(' ');
//build the query
foreach(string word in str)
{
//brand is the field I'm searching in
q2.Add(new Term("brand", word.ToLower()));
}
//finally, add it to the BooleanQuery object
query.Add(q2, BooleanClause.Occur.MUST);
//Don't forget to run the query
Hits hits = searcher.Search(query);
希望这有帮助!
答案 1 :(得分:9)
也许替换:
mercedes trucks
带
mercedes?trucks
适合我。
答案 2 :(得分:4)
您在搜索时可能使用的是与您创建索引的分析器不同的分析器。
在搜索时尝试使用KeywordAnalyzer。它将创建搜索字符串的单个标记,这可能就是您要查找的内容。
答案 3 :(得分:0)
我在这里猜测 - exactMask
是否在字符串周围添加引号?你应该简单地使用字符串“mercedes truck”,而不是操纵它。
new TermQuery(new Term("companyName", "mercedes trucks"));
答案 4 :(得分:0)
您是否考虑过使用PhraseQuery?该领域是否必须未被驯服?我相信未经说明的是ids等,而不是有几个单词作为其内容的领域。
答案 5 :(得分:0)
我发现最好的方法是使用关键字分析器解析查询,并使用以下查询“mercedes?trucks”。
答案 6 :(得分:-1)
即使我面临同样的问题。你必须做以下事情摆脱这个问题。 1)将字段值添加到文档时,删除其间的空格。 2)将字段值设为小写。 3)以小写形式创建搜索文本。 4)删除搜索文本中的空格。 问候 〜SHEF