【问题标题】:Is there a way to prevent partial word matching using Sitecore Search and Lucene?有没有办法使用 Sitecore Search 和 Lucene 防止部分单词匹配?
【发布时间】:2023-03-07 14:17:01
【问题描述】:

在使用 Sitecore Search 和 Lucene 时,有没有办法不匹配部分单词?例如,在搜索“Bos”时,我不想匹配“Boston”这个词。有没有办法要求整个单词匹配?这是一个代码sn-p。我正在使用 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);
    ...
}

【问题讨论】:

    标签: search sitecore lucene.net sitecore6


    【解决方案1】:

    您可能想尝试这样的方法来获取您想要运行的查询。它会将 + 放入(表示所需的术语)并引用该术语,因此它应该与您要查找的内容完全匹配,它对我有用。如果您传入 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 并在其中使用查询语法,如果您知道语法应该是什么然后向后工作以查看,则更容易什么查询对象会生成它。

    【讨论】:

    • 不,它对我不起作用。如果我在“Bos”上搜索,它仍然会返回字段中带有“Boston”的项目。
    【解决方案2】:

    您必须将查询放在双引号中以获得完全匹配的结果。 Lucene 支持许多这样的操作符和布尔参数,可以在这里找到:http://lucene.apache.org/core/2_9_4/queryparsersyntax.html

    【讨论】:

      【解决方案3】:

      这取决于字段类型。如果您有备注或文本字段,则应用部分匹配。如果您想要完全匹配,请改用字符串字段。在那里你可以找到一些细节:https://www.cmsbestpractices.com/bug-how-to-fix-solr-exact-string-matching-with-sitecore/。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        • 2019-02-15
        • 1970-01-01
        相关资源
        最近更新 更多