当前位置: 首页 > 知识库问答 >
问题:

如何在Lucene4中搜索int字段?

缪阎宝
2023-03-14

我试图实现一个文档索引(大致对应于DB行),其中一个字段是整数。我将它们添加到索引中,比如:

Document doc = new Document();
doc.add(new StringField("ticket_number", rs.getString("ticket_number"),
        Field.Store.YES));
doc.add(new IntField("ticket_id", rs.getInt("ticket_id"),
        Field.Store.YES));
doc.add(new StringField("id_s", rs.getString("ticket_id"),
        Field.Store.YES));
w.addDocument(doc);
Document<
    stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<ticket_number:230114W> 
    stored<ticket_id:152> 
    stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<id_s:152>>

共有1个答案

令狐昌胤
2023-03-14

以下为我工作:

    RAMDirectory idx = new RAMDirectory();
    IndexWriter writer = new IndexWriter(
            idx,
            new IndexWriterConfig(Version.LUCENE_40, new ClassicAnalyzer(Version.LUCENE_40))
    );
    Document document = new Document();
    document.add(new StringField("ticket_number", "t123", Field.Store.YES));
    document.add(new IntField("ticket_id", 234, Field.Store.YES));
    document.add(new StringField("id_s", "234", Field.Store.YES));
    writer.addDocument(document);
    writer.commit();

    IndexReader reader = DirectoryReader.open(idx);
    IndexSearcher searcher = new IndexSearcher(reader);

    Query q1 = new TermQuery(new Term("id_s", "234"));
    TopDocs td1 = searcher.search(q1, 1);
    System.out.println(td1.totalHits);  // prints "1"

    Query q2 = NumericRangeQuery.newIntRange("ticket_id", 1, 234, 234, true, true);
    TopDocs td2 = searcher.search(q2, 1);
    System.out.println(td2.totalHits);  // prints "1"

正如femtoRgon指出的,对于数值(长、日期、浮点等),您需要使用NumericRangeQuery并指定精度。否则,Lucene不知道如何定义相似度。

 类似资料:
  • 我刚开始使用hibernate lucene搜索。从几天以来,我一直致力于搜索关键字与特殊字符。我正在使用MultiFieldQueryParser进行精确短语匹配以及布尔搜索。但在这个过程中,我无法得到搜索关键字的结果,如“有1年以上的经验”,如果我没有在搜索关键字周围添加任何引号,那么我就得到了结果。所以我在执行lucene查询时观察到的是,它正在转义特殊符号(+)。我正在使用Standard

  • 我还没有为索引创建任何显式设置。谢了。

  • 问题内容: 我想要一个自动完成功能。我对数据类型的属性有简短的描述性字符串。我在redis中有一个ID列表,其中包含按创建日期排序的数据类型,并且使用ID来设置和获取该数据类型的属性,如redis类型文档中所述。我不使用哈希表。在此设置下,获取与输入到自动完成输入框中的内容相匹配的字符串集的最佳方法是什么?遍历所有id并检查我要搜索的属性- 对于每次击键,这似乎是错误的方法。 编辑: 除了下面的答

  • 问题内容: 在SQLite中搜索子字符串的最有效方法是什么? 我在看LIKE运算子。 我有正确的主意吗?这对您来说效果很好吗? http://www.sqlite.org/lang_expr.html 谢谢你。 问题答案: 是的,请使用“赞”。 将返回名称列中任何位置带有“ omm”的行。

  • 我正在尝试使用vespa构建打字头搜索。由于有很多数据,我不想使用流媒体模式。通配符搜索是我期望看到的,但它看起来仅限于流模式(正则表达式和 match:子字符串仅适用于流模式)。任何关于如何实现它或自定义的指针将不胜感激。

  • 问题内容: 我第一次使用Postgresql,并且试图在我的网站中创建一个搜索引擎。我有这张桌子: 然后我为表的每个字段创建了一个索引(这是正确的方法吗?或者我可以为所有字段创建一个索引?): 现在,如果我想在每个索引中搜索一个单词,SQL查询是什么? 我尝试了这个,它的工作原理: 是否存在更好的方法来做到这一点?我可以搜索多个吗?我的一个朋友提出了一个解决方案,但这是针对MySQL数据库的: P