gpt4 book ai didi

search - 匹配 lucene 整个字段精确值

转载 作者:行者123 更新时间:2023-12-01 13:46:05 24 4
gpt4 key购买 nike

我正在创建一个 Lucene 4.10.3 索引。

我正在使用 StandardAnalyzer。

    String indexpath="C:\\TEMP";
IndexWriterConfig iwc=newIndexWriterConfig(Version.LUCENE_4_10_3,new StandardAnalyzer(CharArraySet.EMPTY_SET));
Directory dir = FSDirectory.open(new File(indexpath));
IndexWriter indexWriter = new IndexWriter(dir, iwc);
iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
Document doc = new Document();
doc.add(new TextField("city", "ANDHRA",Store.YES));
doc.add(new TextField("city", "ANDHRA PRADESH",Store.YES));
doc.add(new TextField("city", "ASSAM AND NAGALAND",Store.YES));
doc.add(new TextField("city", "ASSAM",Store.YES));
doc.add(new TextField("city", "PUNJAB",Store.YES));
doc.add(new TextField("city", "PUNJAB AND HARYANA",Store.YES));
indexWriter.addDocument(doc);

当我尝试使用短语查询在 lucene 索引中进行搜索时

例如

 try {
QueryBuilder build=new QueryBuilder(new KeywordAnalyzer());
Query q1=build.createPhraseQuery("city","ANDHRA");
Directory dir = FSDirectory.open(new File("C:\\TEMP"));
DirectoryReader indexReader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(indexReader);
ScoreDoc hits[] = searcher.search(q1,10).scoreDocs;
Set<String> set=new HashSet<String>();
set.add("city");
for (int i=0; i < hits.length; i++) {
Document document = indexReader.document(hits[i].doc,set);
System.out.println(document.get("city"));
}
} catch (IOException e) {
e.printStackTrace();
}

我们得到的结果如下-

安得拉邦

安得拉邦

当我搜索“ANDHRA”时如何只获得“ANDHRA”结果,不是“ANDHRA PRADESH”,如何使用 StandardAnalyzer 匹配 lucene 中的整个字段值?

最佳答案

如果您想匹配字段的准确、未修改和未标记化的值,则根本不应该对其进行分析。只需使用 StringField 而不是 TextField

如果你想要一些分析(即小写,或类似的),但没有分词,你可以使用 KeywordTokenizer在您的 Analyzer 实现中。

如果您使用 QueryParser 创建查询,请注意解析器如何使用空格来分隔查询子句。您可能会发现有必要编写如下查询:city:ANDHRA\PRADESH(我相信QueryParser.escape 会为您完成此操作) .

关于search - 匹配 lucene 整个字段精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077593/

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