有没有办法阻止使用Sitecore Search和Lucene进行部分单词匹配?

时间:2013-08-15 12:41:15

标签: search sitecore lucene.net sitecore6

使用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);
    ...
}

3 个答案:

答案 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/