使用Sitecore Search和Lucene是否有办法不匹配部分单词?例如,当搜索“Bos”时,我想不匹配“Boston”这个词。有没有办法要求整个单词匹配?这是一段代码片段。我正在使用FieldQuery。
bool _foundHits = false;
_index = SearchManager.GetIndex("product_version_index");
using (IndexSearchContext _searchContext = _index.CreateSearchContext())
{
QueryBase _query = new FieldQuery("title", txtProduct.Text.Trim());
SearchHits _hits = _searchContext.Search(_query, 1000);
...
}
答案 0 :(得分:1)
您可能想尝试这样的操作来获取要运行的查询。它将把+ in(表示一个必需的术语)并引用该术语,因此它应该完全匹配你正在寻找的东西,它对我起作用。提供你传入BooleanClause.Occur.MUST。
protected BooleanQuery GetBooleanQuery(string fieldName, string term, BooleanClause.Occur occur)
{
QueryParser parser = new QueryParser(fieldName, new StandardAnalyzer());
BooleanQuery query = new BooleanQuery();
query.Add(parser.Parse(term), occur);
return query;
}
基本上所以你的查询最终被解析为+ title:“Bos”,你也可以下载Luke并在那里使用查询语法,如果你知道语法应该是什么就更容易,然后再向后看看什么查询对象将生成它。
答案 1 :(得分:0)
您必须将查询放在双引号中才能显示完全匹配结果。 Lucene支持许多这样的运算符和布尔参数,可以在这里找到:http://lucene.apache.org/core/2_9_4/queryparsersyntax.html
答案 2 :(得分:0)
这取决于字段类型。如果您有备忘录或文本字段,则应用部分匹配。如果您想要精确匹配,请使用字符串字段。在那里你可以找到一些细节:https://www.cmsbestpractices.com/bug-how-to-fix-solr-exact-string-matching-with-sitecore/。