首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同序列的Lucene .net搜索文本

不同序列的Lucene .net搜索文本
EN

Stack Overflow用户
提问于 2018-11-16 10:13:05
回答 1查看 42关注 0票数 0

我是lucene.net的新手。我正在开发一个API来扫描名称列表。参数将输入人员的全名。

然而,根据当前的代码,如果我在名称列表中输入'Pit Bull‘搜索,就会出现'Pit Bull Adam’、'Pit Tim Bull‘等等.

但我想要的结果是“比特牛”或“公牛坑”。

我是否使用正确的分析器或查询?我该怎么办?

这是我创建的索引。

代码语言:javascript
复制
        var doc = new Document();
        doc.Add(new Field("Id", model.EntityId.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
        doc.Add(new Field("FullName", model.FullName, Field.Store.YES, Field.Index.ANALYZED));
        doc.Add(new Field("Name2", model.Name2?? "", Field.Store.YES, Field.Index.ANALYZED));
        doc.Add(new Field("Name3", model.Name3?? "", Field.Store.YES, Field.Index.ANALYZED));
        doc.Add(new Field("Gender", indexModel.GenderType.HasValue ? indexModel.GenderType.Value.ToString() : "", Field.Store.YES, 
        Field.Index.NOT_ANALYZED, Field.TermVector.NO));

这是我的搜索方法。

代码语言:javascript
复制
using (var indexReader = IndexReader.Open(ramDirectory, true))
        {
            using (var searcher = new IndexSearcher(indexReader))
            {

                var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

                MultiFieldQueryParser _MultiMatchName = new 
                MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30,
                    new string[] { "FullName", "Name2", "Name3" }, analyzer);

                const int hitLimits = 1000;

                _MultiMatchName.DefaultOperator = QueryParser.Operator.AND;

                var query = new BooleanQuery();

                query.Add(inputName,Occur.MUST);

            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-21 02:26:54

原来我应该使用WhitespaceAnalyzer。创建索引和搜索索引时。

代码语言:javascript
复制
using (var indexReader = IndexReader.Open(ramDirectory, true))
    {
        using (var searcher = new IndexSearcher(indexReader))
        {

            var analyzer = new WhitespaceAnalyzer();

            MultiFieldQueryParser _MultiMatchName = new 
            MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30,
                new string[] { "FullName", "Name2", "Name3" }, analyzer);

            const int hitLimits = 1000;

            _MultiMatchName.DefaultOperator = QueryParser.Operator.AND;

            var query = new BooleanQuery();

            query.Add(inputName,Occur.MUST);

        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53335651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档