可以在特定的Lucene文档中找到常用词吗? 例如:

可以在特定的Lucene文档中找到常用词吗? 例如:,lucene,Lucene,结果:{{“doc1”、“doc2”、“doc3”}、{“苹果”、“iPhone”}或类似的东西 其他问题:是否有更好的库/系统使用Lucene的数据来实现此目的?是的,您可以使用术语向量来检索此信息 首先,您需要确保术语向量存储在索引中,例如: private static Document createDocument(String title, String content) { Document doc = new Document(); doc.add(new Str

结果:
{{“doc1”、“doc2”、“doc3”}、{“苹果”、“iPhone”}
或类似的东西


其他问题:是否有更好的库/系统使用Lucene的数据来实现此目的?

是的,您可以使用
术语向量
来检索此信息

首先,您需要确保术语向量存储在索引中,例如:

private static Document createDocument(String title, String content) {
    Document doc = new Document();

    doc.add(new StringField("title", title, Field.Store.YES));
    FieldType type = new FieldType();
    type.setTokenized(true);
    type.setStoreTermVectors(true);
    type.setStored(false);
    type.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
    doc.add(new Field("content", content, type));

    return doc;
}
然后,您可以检索给定文档id的术语向量:

private static List<String> getTermsForDoc(int docId, String field, IndexReader reader) throws IOException {
    List<String> result = new ArrayList<>();

    Terms terms = reader.getTermVector(docId, field);
    TermsEnum it = terms.iterator();
    for(BytesRef br = it.next(); br != null; br = it.next()) {
        result.add(br.utf8ToString());
    }

    return result;
}
private static List getTermsForDoc(int docId,String字段,IndexReader reader)抛出IOException{
列表结果=新建ArrayList();
Terms=reader.getTermVector(docId,字段);
TermsEnum it=terms.iterator();
for(BytesRef br=it.next();br!=null;br=it.next()){
添加(br.utf8ToString());
}
返回结果;
}
最后,您可以检索两个文档的通用术语:

private static List<String> getCommonTerms(int docId1, int docId2, IndexSearcher searcher) throws IOException {
    // Using the field "content" is just an example here.
    List<String> termList1 = getTermsForDoc(docId1, "content", searcher);
    List<String> termList2 = getTermsForDoc(docId2, "content", searcher);

    termList1.retainAll(termList2);
    return termList1;
}
private static List getCommonTerms(int-docId1、int-docId2、IndexSearcher搜索器)引发IOException{
//这里使用字段“content”只是一个例子。
List termList1=getTermsForDoc(docId1,“内容”,搜索者);
List termList2=getTermsForDoc(docId2,“内容”,搜索者);
条款清单1.保留条款(条款清单2);
返回术语列表1;
}

当然,这可以很容易地扩展为允许任意数量的文档。

您的意思是不提供查询字符串?文档应该自己识别常用词?我也可以使用术语向量来查找最常用的词吗?例如,如果我给出5个文档ID,我在所有5个文档上运行代码,并且只有3或4个文档有一个共同的单词,那么我希望得到这个单词(即使它不在其中的2个文档中),您可以将所有术语放入一个大列表中,然后使用如下内容:
private static List<String> getCommonTerms(int docId1, int docId2, IndexSearcher searcher) throws IOException {
    // Using the field "content" is just an example here.
    List<String> termList1 = getTermsForDoc(docId1, "content", searcher);
    List<String> termList2 = getTermsForDoc(docId2, "content", searcher);

    termList1.retainAll(termList2);
    return termList1;
}