Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Lucene.NET IndexSearcher返回零结果?

为什么Lucene.NET IndexSearcher返回零结果?
EN

Stack Overflow用户
提问于 2013-03-08 11:01:43
回答 3查看 3.4K关注 0票数 3

我最近开始使用Lucene.NET,我遇到了一些问题:我使用IndexWriterC:\\TestIndex中索引我的文档,我猜它是有效的,因为它生成了几个.fnm.frq.cfx.tii.tis文件。

问题是,当我试图通过它们进行简单的搜索时,我永远得不到任何结果。下面是我使用的代码,

代码语言:javascript
运行
AI代码解释
复制
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Lucene.Net.Util;

//Provide the directory where index is stored
Directory directory = FSDirectory.Open(newSystem.IO.DirectoryInfo(@"C:\\TestIndex")); 

IndexReader indexReader = IndexReader.Open(directory, true);
Searcher indexSearch = new IndexSearcher(indexReader);

Analyzer std = new StandardAnalyzer(Version.LUCENE_29);
QueryParser parser = new QueryParser(Version.LUCENE_29, "text", std);
Query qry = parser.Parse("morning");

// true opens the index in read only mode
Searcher srchr = new IndexSearcher(IndexReader.Open(directory, true));

TopScoreDocCollector cllctr = TopScoreDocCollector.Create(100, true);

ScoreDoc[] hits = cllctr.TopDocs().ScoreDocs;
srchr.Search(qry, cllctr); 

for (int i = 0; i < hits.Length; i++)
{
    int docId = hits[i].Doc;
    float score = hits[i].Score;
    Document doc = srchr.Doc(docId);
    Console.WriteLine("Searched from Text: " + doc.Get("text"));
}

我尝试了几种方法,但从未得到任何结果。你有什么想法吗?

下面是索引代码,

代码语言:javascript
运行
AI代码解释
复制
IndexWriter indexWriter = 
    new IndexWriter(
        luceneDir, 
        new StandardAnalyzer(Version.LUCENE_29), 
        true, 
        IndexWriter.MaxFieldLength.UNLIMITED);

string[] listOfFiles = Directory.GetFiles(@"C:\Projects\lucene.net-trunk\build\vs2010\demo\MyTestProject\TestDocs");

foreach (string s in listOfFiles)
{
    String content = File.ReadAllText(s);
    Document doc = new Document();
    String title = s;

    // adding title field
    doc.Add(new Field("title", title, Field.Store.YES, Field.Index.NOT_ANALYZED));  
    doc.Add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED));

    indexWriter.AddDocument(doc);
}

indexWriter.Optimize();
indexWriter.Dispose();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-08 11:03:45

使用luke检查索引以确保其包含数据,还可以执行搜索以验证搜索条件

http://www.getopt.org/luke/

编辑- (Luke将使用你需要安装java才能使用的lucene和lucene.net索引)

编辑

更新线路

代码语言:javascript
运行
AI代码解释
复制
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", std);

使用

代码语言:javascript
运行
AI代码解释
复制
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "content", std);

您已将默认搜索字段设置为不存在的text

另外,您正在尝试获取console.write行中的错误字段

票数 2
EN

Stack Overflow用户

发布于 2013-03-08 11:14:56

代码语言:javascript
运行
AI代码解释
复制
using Lucene.Net.Analysis;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Store;

...

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(@"C:\\TestIndex"));

var writer = new IndexWriter(
    directory, 
    new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), 
    true, 
    new MaxFieldLength(int.MaxValue));

更新

我使用的搜索方法略有不同,但无论如何,您可能需要交换这两行:

代码语言:javascript
运行
AI代码解释
复制
ScoreDoc[] hits = cllctr.TopDocs().ScoreDocs;
srchr.Search(qry, cllctr); 

所以它变成了:

代码语言:javascript
运行
AI代码解释
复制
srchr.Search(qry, cllctr); 
ScoreDoc[] hits = cllctr.TopDocs().ScoreDocs;

这意味着收集器在执行搜索时首先收集结果,然后您通过收集器实例获得评分文档。

票数 0
EN

Stack Overflow用户

发布于 2013-03-08 12:12:22

你能试着明确地指定你要搜索的字段吗?例如:

代码语言:javascript
运行
AI代码解释
复制
    Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", std);
    Lucene.Net.Search.Query qry = parser.Parse("content: morning");

我认为Lucene需要你告诉它在哪个字段(标题,内容...)你想运行你的查询。

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

https://stackoverflow.com/questions/15292433

复制
相关文章
火力全开——仿造Baidu简单实现基于Lucene.net的全文检索的功能
Lucene.Net Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,是一个Library.你也可以把它理解为一个将索引,搜索功能封装的很好的一套简单易用的API(提供了完整的查询引擎和索引引擎)。利用这套API你可以做很多有关搜索的事情,而且很方便.。开发人员可以基于Lucene.net实现全文检索的功能。 注意:Lucene.Net只能对文本信息进行检索。如果不是文本信息,要转换为文本信息,比如要检索E
用户1161731
2018/03/12
1.5K0
火力全开——仿造Baidu简单实现基于Lucene.net的全文检索的功能
借助 Lucene.Net 构建站内搜索引擎(上)
前言:最近翻开了之前老杨(杨中科)的Lucene.Net站内搜索项目的教学视频,于是作为老杨脑残粉的我又跟着复习了一遍,学习途中做了一些笔记也就成了接下来您看到的这篇博文,仅仅是我的个人笔记,大神请呵呵一笑而过。相信做过站内搜索的.Net程序员应该对Lucene.Net不陌生,没做过的也许会问:就不是个查询嘛!为什么不能使用Like模糊查找呢?原因很简单:模糊查询的契合度太低,匹配关键字之间不能含有其他内容。最重要的是它会造成数据库全表扫描,效率低下,即使使用视图,也会造成数据库服务器"亚历山大"!因此,有必要了解一下Lucene.Net这个神器(也许现在早已不是)!
Edison Zhou
2018/08/20
1.1K0
借助 Lucene.Net 构建站内搜索引擎(上)
Lucene.net 的性能探究--Lucene.net 的并发处理能力到底有多强?
这篇博客并不是证明Lucene.net的性能有多强悍,实际上Lucene.net的并发能力并不让人很满意,这得看你怎么用它。
ShenduCC
2019/04/18
1.4K0
lucene.net 应用资料
本文将围绕该个实例介绍了lucene.net的索引的建立以及如何针对索引进行搜索.最后还将给出源代码供大家学习.
深蓝studyzy
2022/06/15
3890
Lucene.Net实现站内搜索功能
Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。开发人员可以基于Lucene.net实现全文检索的功能。
做全栈攻城狮
2018/12/20
1.1K0
mybatis返回结果处理
当查询的记录条数是多条的时候,必须使用集合接收。如果使用单个实体类接收会出现异常。如果返回的是一条记录可以用集合接收
一个风轻云淡
2023/10/15
3110
mybatis返回结果处理
使用Lucene.Net做一个简单的搜索引擎-全文索引
Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
Mr. Wei
2020/02/29
1.1K0
使用Lucene.Net做一个简单的搜索引擎-全文索引
mybatis返回结果类型(resulttype返回list)
这样设置返回类型为resultClass=”java.util.HashMap”,查询时执行queryForList
全栈程序员站长
2022/08/01
5.8K0
SpringBoot统一返回结果
在后台开发时,控制台得到的数据格式会有不同,这时我们需要设置统一返回结果,方便我们分析数据以及对数据进行管理。
算法与编程之美
2022/05/23
9950
SpringBoot统一返回结果
lucene.net全文检索(一)相关概念及示例
站内搜索通俗来讲是一个网站或商城的“大门口”,一般在形式上包括两个要件:搜索入口和搜索结果页面,但在其后台架构上是比较复杂的,其核心要件包括:中文分词技术、页面抓取技术、建立索引、对搜索结果排序以及对搜索关键词的统计、分析、关联、推荐等。
明志德道
2023/10/21
3380
lucene.net全文检索(一)相关概念及示例
mybatis返回对象_存储过程不能返回结果
在更多的了解mybatis后发现不单单通过实体类可以直接返回数据,还可以直接返回一个Map结果集(resultType=”java.util.Map”) ,如果是多条数据则返回一个List<Map<String, Object>>结果集。
全栈程序员站长
2022/11/09
1.9K0
mybatis返回对象_存储过程不能返回结果
构造IndexSearcher源码解析
2. indexCreatedVersionMajor 该字段描述的是创建该segments_N文件时的lucene的版本,在读取阶段,索引文件可能被不同的版本的lucene读取,该值用来判断兼容性
LuceneReader
2019/12/11
9240
Lucene2.1 的官方示例代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Lucene.Net; using Lucene.Net.Analysis; using Lucene.Net.Analysis.Standard;
菩提树下的杨过
2018/01/22
5880
返回结果的 HTTP 状态码
返回结果的 HTTP 状态码.png 返回结果的 HTTP 状态码 状态码的职责 当客户端向服务器端发送请求时,描述返回的请求结果 状态码的大致分类 1XX 信息性状态码 · 接收的请求正在处理 2XX 成功状态码 · 请求正常处理完毕 3XX 重定向状态码 · 需要进行附加操作以完成请求 4XX 客户端错误状态码 · 服务器无法处理请求 5XX 服务器错误状态码 · 服务器处理请求出错 2XX 成功 200 OK 表示从客户端发来的请求在服务器端被正常处理了 204 No Content 该状态码代表服
李才哥
2021/02/21
2.6K0
返回结果的 HTTP 状态码
关于Lucene.net
我这里说的只要是在创建索引和查询索引的时候,分词器类型必须要保持一致!!!否则结果不正确会雷死你。
Isaac Zhang
2019/09/10
4070
项目统一返回结果设计
统一返回格式如下 { "code": 200, "message": "成功", "data": [ { "id": 2, "name": "欧阳老师", "intro": "高级讲师" } ], "ok": true } 创建统一返回结果类 package com.ssm.ggkt.result; import lombok.Data; import lombok.NoArgsConstructor; /** * @auth
shaoshaossm
2022/12/27
6970
SpringBoot Jackson 框架返回结果处理
1. 常用框架 ---- 框架 阿里 fastjson 谷歌 gson JavaBean序列化为Json,性能:Jackson > FastJson > Gson > Json-lib 2. Jackson 处理相关结果 ---- 1. 指定字段不返回 @JsonIgnpre @JsonIgnore private String pwd; 比如:密码等字段,是不在页面展示的。 2. 指定日期格式 @JsonFormat(pattern="yyyy-MM-dd hh:mm:ss", locale=
山海散人
2021/03/03
7970
js如何返回异步函数结果
假设您有这样一个问题:您正在进行一个异步调用,并且需要从原始函数返回该调用的结果。
IT工作者
2022/01/01
6.7K0
REST API返回结果对象设计
基于REST API的项目返回的数据结构题都是统一的,这样方便接口对接和使用。因此,对结果对象的设计会有一定的要求:
程序新视界
2021/12/07
1.1K0
全文检索数据挖掘
全文检索(Full-text Search):先建立索引,再对索引进行搜索的过程,搜索结果为匹配文本
sofu456
2019/07/09
8070

相似问题

Lucene.net IndexSearcher.search无结果

10

Lucene.NET只读IndexSearcher

22

Lucene.Net IndexSearcher不与BooleanQuery一起使用

10

IndexWriter和IndexSearcher Lucene.net的单例模式

14

为什么compactMap返回零结果?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档