在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