gpt4 book ai didi

java - Lucene - 精确的字符串匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:43 25 4
gpt4 key购买 nike

我正在尝试创建一个 Lucene 4.10 索引。我只想在索引中保存我放入文档中的确切字符串,无需标记化。

我正在使用 StandardAnalyzer。

    Directory dir = FSDirectory.open(new File("myDire"));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc);
StringField field1 = new StringField("1", content1, Store.YES);
StringField field2 = new StringField("2", content2, Store.YES);
StringField field3 = new StringField("3", content3, Store.YES);
doc.add(field1);
doc.add(field2);
doc.add(field3);
writer.addDocument(doc, analyzer);
writer.close();

如果我打印索引的内容,我可以看到我的数据被存储,例如,我的文档有这个“字段 3”:

    stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<3:"Fuel Tank Capacity"@en>

我正在尝试查询索引以取回它:

    IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("3", analyzer);
String queryString = "\"\"Fuel Tank Capacity"\@en\"";
Query query = parser.createPhraseQuery("3", QueryParser.escape(queryString));
TopDocs docs = searcher.search(query, null, 20);

我正在尝试搜索术语“Fuel Tank Capacity”@en(包括引号),所以我试图将它们转义并在术语周围加上另外几个引号,以便让 lucene 明白我正在搜索对于整个文本。

如果我打印查询,我得到: 3:“油箱容量en”但我不想拆分 @ 符号上的文本。

我认为我的第一个问题是 StandardAnalyzer,因为如果我没记错的话,它似乎可以标记化。但是,我无法理解如何查询索引以准确获得“油箱容量”@en(包括引号)。

谢谢

最佳答案

您可以简化问题,将 QueryParser 完全排除在外。由于您使用的是 StringField,该字段的全部内容都是一个词项,所以一个简单的 TermQuery应该运作良好:

Query query = new TermQuery(new Term("3","\"Fuel Tank Capacity\"@en"));

关于java - Lucene - 精确的字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com