java - Lucene 6.2.1如何在不知道其名称的情况下获取所有字段名称或在所有字段中进行搜索

标签 java lucene

我是Lucene的新手,我想知道是否可以在不知道其名称的情况下搜索多个文档中所有可能的字段,或者...另一种方法:获取所有字段名称(6.2.1版)


例如:如何从“字段”数组中获取所有名称,而不像下面的示例那样填充它们

Analyzer analyzer = new StandardAnalyzer();
String querystr = "test";
String[] fields = {"title","isbn","desc", "name", "surname", "description"};
BooleanClause.Occur[] flags = new BooleanClause.Occur[fields.length];
Arrays.fill(flags, BooleanClause.Occur.SHOULD);
Query query = MultiFieldQueryParser.parse(querystr, fields, flags, analyzer);


我已经检查了这些主题:

a)How to search across all the fields?

我们已经实现了以下答案:


1)索引时间方法:使用包罗万象的字段。这不过是追加所有字段中的所有文本(输入文档中的全部文本)并将生成的巨大文本放在单个字段中。您必须在建立索引时添加一个附加字段,以作为一个包罗万象的字段。


但是如果有可能,我们希望更改它

b)https://www.programcreek.com/java-api-examples/index.php?api=org.apache.lucene.queryParser.MultiFieldQueryParser

c)IndexReader.getFieldNames Lucene 4

但是这些解决方案在Lucene版本6.2.1中不存在


IndexReader.getFieldNames()(v。3.3.0)

最终的AtomicReader阅读器= searcher.getAtomicReader();

最终的FieldInfos infos = reader.getFieldInfos(); (v。4.2.1)

...或者是否有一种方法(不一定是MultiFieldQueryParser)提供了对所有字段的搜索而没有它们的名称(6.2.1版)?

最佳答案

根据您的问题,我建议您只想搜索一些术语,并在其中实际索引此值的字段,知道不是很重要吗?

在这种情况下,最好的方法是根据elasticsearch或solr如何处理此问题的结构实施普通的全文本搜索:


向每个文档添加专用的“全文” TextField(TextField用于全文搜索)
用其他字段的所有信息填充全文字段,并用空格分隔
根据全文搜索您的字词


这样便可以轻松实现全文搜索。无需知道字段名称并对其进行迭代。

关于java - Lucene 6.2.1如何在不知道其名称的情况下获取所有字段名称或在所有字段中进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51170434/

相关文章:

java - 重构代码以删除 uuid

java - Lucene:相似度类...如何定义几个相似度度量?

java - 在Lucene中嵌套搜索而不重复关键字

hibernate - Hibernate Search-如果以前未对现有数据建立索引,则重新创建索引

java - Java中有缓冲区填充接收方法吗?

java - PipeLine释放资源lambda

java - Bean创建异常: Error creating bean with name 'sessionFactory'

java - java 是否有内置的 elementAt(stack s, int index) 方法?

search - Solr 中的通配符查询错误

java - 我想用 Lucene 读取索引中的单个术语