- जब MySQL में कोई नया आइटम जोड़ा जाता है, तो इसे लुसीन द्वारा भी अनुक्रमित किया जाना चाहिए।
- जब कोई मौजूदा आइटम MySQL से हटा दिया जाता है, तो इसे लुसेन की अनुक्रमणिका से भी हटा दिया जाना चाहिए।
विचार एक स्क्रिप्ट लिखना है जिसे शेड्यूलर (जैसे एक सीआरओएन कार्य) के माध्यम से हर एक्स मिनट कहा जाएगा। यह MySQL और लुसीन सिंक्रनाइज़ करने का एक तरीका है। मैंने अभी तक प्रबंधित किया है:अपाचे ल्यूसीन के साथ एक MySQL डेटाबेस इंडेक्स करें, और उन्हें सिंक्रनाइज़ करें
- MySQL में प्रत्येक नए जोड़े गए आइटम के लिए, लुसीन भी इसे अनुक्रमित करता है।
- MySQL में पहले से जोड़े गए प्रत्येक आइटम के लिए, लुसीन इसे पुन: संशोधित नहीं करता है (कोई डुप्लिकेट आइटम नहीं)।
इस बिंदु मैं आप कुछ मदद का प्रबंधन करने के पूछ रहा हूँ है:
- प्रत्येक पूर्व में जोड़े आइटम के लिए है कि तब MySQL से हटा दिया गया है, Lucene भी यह unindex चाहिए।
public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", ""); StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer); IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), config); String query = "SELECT id, name FROM tag"; Statement statement = connection.createStatement(); ResultSet result = statement.executeQuery(query); while (result.next()) { Document document = new Document(); document.add(new Field("id", result.getString("id"), Field.Store.YES, Field.Index.NOT_ANALYZED)); document.add(new Field("name", result.getString("name"), Field.Store.NO, Field.Index.ANALYZED)); writer.updateDocument(new Term("id", result.getString("id")), document); } writer.close(); }
पुनश्च::
यहाँ कोड मैं प्रयोग किया जाता है, जो सूचकांक करने के लिए एक MySQL तालिका tag (id [PK] | name)
की कोशिश करता है इस कोड को केवल, कोई ज़रूरत नहीं मुझे बताओ कि यह कैसे भयानक है परीक्षण उद्देश्य के लिए है :)
संपादित करें:
एक समाधान किसी भी previsouly जोड़ा दस्तावेज़ नष्ट करने के लिए किया जा सकता है, और सभी डेटाबेस पुन: अनुक्रमणिका:
writer.deleteAll();
while (result.next()) {
Document document = new Document();
document.add(new Field("id", result.getString("id"), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.add(new Field("name", result.getString("name"), Field.Store.NO, Field.Index.ANALYZED));
writer.addDocument(document);
}
मुझे यकीन नहीं है कि यह सबसे अनुकूलित समाधान है, है ना?
आपने क्या किया? –