在Lucene中,我们可以使用TermQuery来搜索带有字段的文本。我想知道如何在一堆字段或所有可搜索字段中搜索关键字?如何搜索所有字段?
14
A
回答
9
两种方法
1)指数时间的方法:使用包罗万象的场。这只不过是在所有字段中添加所有文本(来自您输入文档的全部文本),并将生成的巨大文本放在单个字段中。您必须在编制索引时添加一个附加字段,以充当全面的字段。
2)搜索时间方法:使用BooleanQuery来组合多个查询,例如TermQuery实例。这些多个查询可以形成为涵盖所有目标字段。
Example检查文章结尾处。
如果您在运行时知道目标字段列表,请使用方法2。否则,你必须使用第一种方法。
20
另一种方法是使用MultiFieldQueryParser
,它不需要索引比已有的索引更多的东西,也不需要组合不同的查询。
您可以提供您想要搜索的字段列表以及您的查询,就这些了。
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
Version.LUCENE_41,
new String[]{"title", "content", "description"},
new StandardAnalyzer(Version.LUCENE_41));
Query query = queryParser.parse("here goes your query");
这是我会怎么用Java编写的原Lucene的图书馆这样做。我不确定MultiFieldQueryParser
是否也在lucene.net中可用。
3
另一种简单的方法来使用“MultifieldQueryParser”是用IndexReader.FieldOption.ALL在查询所有字段进行搜索。
以下是c#中的示例。
Directory directory = FSDirectory.Open(new DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath)));
//get analyzer
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
//get index reader and searcher
IndexReader indexReader__1 = IndexReader.Open(directory, true);
Searcher indexSearch = new IndexSearcher(indexReader__1);
//add all possible fileds in multifieldqueryparser using indexreader getFieldNames method
dynamic queryParser = new MultiFieldQueryParser(Version.LUCENE_29, indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer);
dynamic query = queryParser.Parse(Criteria);
TopDocs resultDocs = null;
//perform search
resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc());
dynamic hits = resultDocs.scoreDocs;
click here要看看我的透水答案相同quesiton在vb.net
+0
我没有看到在这里使用鸭打字的关键(即'动态'关键字)。也许你想用'var'来使用类型interence? – 2016-11-04 10:13:46
相关问题
- 1. VSTS如何搜索所有字段?
- 2. Lucene搜索所有字段
- 3. 所有字段搜索
- 4. 搜索所有字段的MYSQL查询?
- 5. 如何在所有字段中搜索int或字符串
- 6. 如何搜索SOLR中包含关键字的所有字段?
- 7. 如何使用FULLTEXT搜索返回所有字段?
- 8. 如何删除所有默认Webkit搜索字段样式?
- 9. 如何在搜索后清除表单中的所有字段?
- 10. 如何使用NHibernate Search搜索所有字段?
- 11. 在特定值的所有表中搜索所有字段(Oracle)
- 12. 如何检索Solr搜索的所有适用的方面字段
- 13. Indexeddb搜索具有特定字段的所有订单
- 14. 如何使此搜索任何字段?
- 15. 如何在Elasticsearch中搜索没有特定字段的索引
- 16. TreelistEx搜索字段
- 17. 如何搜索网页上的搜索字段?
- 18. 如何在URI中搜索多个字段搜索
- 19. 如何搜索和数据输入到搜索字段
- 20. 如何在Ext JS搜索字段中执行搜索
- 21. 如何从一个字符串中搜索所有字符Dictionary.Values()
- 22. 将所有文本字段组合到一个可搜索字段中?
- 23. 如何搜索查询结果集中所有字段的内容?
- 24. 如何在SQL Server中搜索所有使用字段或表的地方
- 25. 跑道API:如何搜索除了商品评论以外的所有字段?
- 26. 只返回匹配所有字段的搜索结果
- 27. php/mysql:用于在所有字段中搜索的sql查询
- 28. 搜索sql表的所有字段时出现语法错误
- 29. 搜索键,在xml中提到的所有字段
- 30. 在SQL Server中搜索所有字段的值
感谢良好的大局观解释。第一种方法是在同一索引中存储不同类型产品时使用的方法,例如打印机与监视器,其中每个文档存在不同的字段,但我希望使用简单搜索字符串进行“全文本”搜索并将所有匹配的产品。 – nothingisnecessary 2017-02-10 02:10:52