30

के साथ एकीकृत करने के लिए कैसे करें मेरी एक परियोजना में मैं mysql के साथ लोचदार खोज का उपयोग करने की योजना बना रहा हूं। मैंने सफलतापूर्वक लोचदार खोज स्थापित की है। मैं ईएस में अलग से इंडेक्स का प्रबंधन करने में सक्षम हूं। लेकिन मुझे नहीं पता कि mysql के साथ इसे कैसे कार्यान्वित किया जाए।लोचदार खोज MySQL

मैंने कुछ दस्तावेज पढ़े हैं लेकिन मैं थोड़ा उलझन में हूं और स्पष्ट विचार नहीं हूं। क्या कोई मेरी मदद कर सकता हैं?

अग्रिम धन्यवाद।

उत्तर

25

अंत में मैं था उत्तर खोजने में सक्षम मेरे निष्कर्ष साझा करना

माइस्क्ल के साथ लोचदार खोज का उपयोग करने के लिए आपको जावा डेटाबेस कनेक्शन (जेडीबीसी) आयातक की आवश्यकता होगी। जेडीबीसी ड्राइवरों के साथ आप अपने mysql डेटा को elasticsearch में सिंक कर सकते हैं।

मैं ubuntu उपयोग कर रहा हूँ 14.04 LTS और के रूप में यह ElasticSearch 2.2.0 स्थापित करने के लिए ElasticSearch-JDBC 2.2.0 जावा में

निम्न चरणों का पालन कर रहे हैं लिखा है और आप Java8 स्थापित करने के लिए elasticsearch चलाने के लिए आवश्यकता होती है और कृपया जाएगा ध्यान दें दोनों संस्करण एक ही

Java8 स्थापित करने के बाद हो गया है ..... elasticsearch 2.2.0 स्थापित के रूप में

# cd /opt 

# wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.2.0/elasticsearch-2.2.0.deb 

# sudo dpkg -i elasticsearch-2.2.0.deb 
इस प्रकार है

यह स्थापना प्रक्रिया/usr/share/elasticsearch में Elasticsearch इंस्टॉल करेगी/जिनकी कॉन्फ़िगरेशन फ़ाइलें/etc/elasticsearch में रखी जाएंगी।

अब कॉन्फ़िगरेशन फ़ाइल में कुछ बुनियादी कॉन्फ़िगरेशन करने दें। यहाँ/आदि/लोचदार खोज/लोचदार खोज।

# ---------------------------------- Cluster ----------------------------------- 
# 
# Use a descriptive name for your cluster: 
# 
cluster.name: servercluster 
# 
# ------------------------------------ Node ------------------------------------ 
# 
# Use a descriptive name for the node: 
# 
node.name: vps.server.com 
# 
# Add custom attributes to the node: 
# 
# node.rack: r1 

अब फाइल को सेव करें और elasticsearch

शुरू: YML आप उदाहरण के लिए

nano /etc/elasticsearch/elasticsearch.yml 

और परिवर्तन क्लस्टर नाम और नोड नाम

से बदलने के लिए फ़ाइल खोल सकते हैं हमारे कॉन्फ़िग फ़ाइल है

/etc/init.d/elasticsearch start 

ES स्थापित परीक्षण करने के लिए या निम्न 01,230,473 नहीं चला

curl -XGET 'http://localhost:9200/?pretty' 

आप उसके बाद निम्न हो अपने elasticsearch अब स्थापित है :)

{ 
    "name" : "vps.server.com", 
    "cluster_name" : "servercluster", 
    "version" : { 
    "number" : "2.2.0", 
    "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe", 
    "build_timestamp" : "2016-01-27T13:32:39Z", 
    "build_snapshot" : false, 
    "lucene_version" : "5.4.1" 
    }, 
    "tagline" : "You Know, for Search" 
} 

अब http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.3.1/elasticsearch-jdbc-2.3.3.1-dist.zip से स्थापित elasticsearch-JDBC

यह डाउनलोड करते हैं और/आदि में एक ही निकालने हैं/elasticsearch/और "लॉग" भी वहाँ (लॉग के पथ होना चाहिए/etc/elasticsearch/लॉग)

फ़ोल्डर बनानेमैं एक डेटाबेस mysql नाम होने " ElasticSearchDatabase" में और साथ खेतों आईडी, नाम और ईमेल

cd /etc/elasticsearch 

और चलाने "परीक्षण" नामित कि तालिका अब

echo '{ 
"type":"jdbc", 
"jdbc":{ 

"url":"jdbc:mysql://localhost:3306/ElasticSearchDatabase", 
"user":"root", 
"password":"", 
"sql":"SELECT id as _id, id, name,email FROM test", 
"index":"users", 
"type":"users", 
"autocommit":"true", 
"metrics": { 
      "enabled" : true 
     }, 
     "elasticsearch" : { 
      "cluster" : "servercluster", 
      "host" : "localhost", 
      "port" : 9300 
     } 
} 
}' | java -cp "/etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/lib/*" -"Dlog4j.configurationFile=file:////etc/elasticsearch/elasticsearch-jdbc-2.2.0.0/bin/log4j2.xml" "org.xbib.tools.Runner" "org.xbib.tools.JDBCImporter" 

निम्नलिखित अंदर पैदा की है जांचें कि क्या MySQL डेटा ES में आयात किया गया है या नहीं

curl -XGET http://localhost:9200/users/_search/?pretty 

यदि सब ठीक हो जाएंगे, तो आप json प्रारूप में अपने सभी mysql डेटा देखने के लिए सक्षम हो सकता है और यदि कोई त्रुटि है तो आप उन्हें /etc/elasticsearch/logs/jdbc.log फ़ाइल

सावधानी में देखने में सक्षम हो जाएगा:

में ES के पुराने संस्करणों ... प्लगइन Elasticsearch-नदी-JDBC इस्तेमाल किया गया था जो पूरी तरह से नवीनतम संस्करण में हटा दिया गया है, तो यह प्रयोग नहीं करते।

मुझे आशा है कि मैं अपना समय :)

किसी भी आगे विचार की सराहना की कर रहे हैं बचा सकता है

संदर्भ यूआरएल: https://github.com/jprante/elasticsearch-jdbc

+0

नमस्ते यह मेरे लिए "प्रकार" नहीं है: "index_not_found_exception" और स्थिति 404. mysql – VipinS

+0

से कनेक्ट नहीं है नोट: आपको जावा 8 ऑरैकल स्थापित करने की आवश्यकता है: 'sudo add-apt-repository ppa: webupd8team/java' फिर 'sudo apt-get update' तो' sudo apt-get oracle-java8 इंस्टॉल करें -इंस्टॉलर '। मेरे पास 9 openjdb स्थापित था और यह मुझे नियंत्रण नियंत्रण त्रुटियों का कारण बन रहा था। – Tsangares

+0

@Yaxita ... अगर आपको mysql से पढ़ने वाली पंक्तियों को संसाधित करना है और फिर लोचदार खोज में फ़ीड करना चाहते हैं, तो आपको पता लगाने का मौका मिला। और आपने mysql में incremntal परिवर्तनों को कैसे प्रबंधित किया (अद्यतन टाइमस्टैम्प के अलावा) ?? –

-2

आधिकारिक Elasticsearch php ग्राहक पर पाया जा सकता:

https://github.com/elastic/elasticsearch-php

आप PHP में Elasticsearch बारे में अधिक जानकारी चाहते हैं, तो यह एक अच्छा पढ़ा है:

https://www.elastic.co/guide/en/elasticsearch/client/php-api/2.0/index.html

+2

हाँ मैं पहले से ही इस दस्तावेज पर विचार किया है लेकिन वे केवल Php के साथ ES बारे में सब कुछ का वर्णन है। माइस्क्ल के बारे में कुछ भी नहीं है। और मैं जानना चाहता हूं कि mysql की पहले से मौजूद तालिका –

+0

के लिए अनुक्रमणिका कैसे बनाएं, आपको MySQL पर अनुक्रमणिका बनाने के लिए PHP की आवश्यकता नहीं है। MySQL में इंडेक्स पर कुछ जानकारी यहां पाई जा सकती है: https://www.howtoforge.com/when-to-use-indexes-in-mysql- डेटाबेस – Arno

30

ES 5.x के रूप में, वे बॉक्स से बाहर इस सुविधा दे दिया है logstash प्लगइन के साथ।

यह समय-समय पर डेटाबेस से डेटा आयात करेगा और ईएस सर्वर पर धक्का देगा।

एक एक सरल आयात फ़ाइल नीचे दिए गए (जो भी here वर्णन किया गया है) बना सकते हैं और स्क्रिप्ट चलाने के लिए logstash उपयोग करने के लिए है। लॉगस्टैश इस स्क्रिप्ट को शेड्यूल पर चलाने का समर्थन करता है।

# file: contacts-index-logstash.conf 
input { 
    jdbc { 
     jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb" 
     jdbc_user => "user" 
     jdbc_password => "pswd" 
     schedule => "* * * * *" 
     jdbc_validate_connection => true 
     jdbc_driver_library => "/path/to/latest/mysql-connector-java-jar" 
     jdbc_driver_class => "com.mysql.cj.jdbc.Driver" 
     statement => "SELECT * from contacts where updatedAt > :sql_last_value" 
    } 
} 
output { 
    elasticsearch { 
     protocol => http 
     index => "contacts" 
     document_type => "contact" 
     document_id => "%{id}" 
     host => "ES_NODE_HOST" 
    } 
} 
# "* * * * *" -> run every minute 
# sql_last_value is a built in parameter whose value is set to Thursday, 1 January 1970, 
# or 0 if use_column_value is true and tracking_column is set 

आप Maven here से mysql जार डाउनलोड कर सकते हैं।

यदि इस स्क्रिप्ट को निष्पादित करते समय इंडेक्स ईएस में मौजूद नहीं है, तो वे स्वचालित रूप से बनाए जाएंगे। Elasticsearch

+1

यह उत्तर पसंदीदा होना चाहिए। –

0

को सामान्य पोस्ट कॉल की तरह ही इसे और अधिक सरल बनाने के लिए मैंने MySQL with Elasticsearch सेटअप करने के लिए एक PHP क्लास बनाया है। मेरी कक्षा का उपयोग करके आप अपने MySQL डेटा को elasticsearch में सिंक कर सकते हैं और पूर्ण-पाठ खोज भी कर सकते हैं। आपको बस अपनी एसक्यूएल क्वेरी सेट करने की आवश्यकता है और कक्षा आपके लिए बाकी करेगी।

+0

मुझे खेद है, आपकी पोस्ट प्रश्न का उत्तर नहीं देती है। आपने एक प्रकार के PHP एपीआई के साथ लोचदार खोज का उपयोग करने के बारे में बताया है, लेकिन यह नहीं कि कैसे elasticsearch डेटाबेस भाषा अज्ञेयवादी से कनेक्ट होता है। क्या होगा यदि कोई कभी PHP का उपयोग नहीं करेगा? आपका ब्लॉग पोस्ट भी भ्रामक है। मैं आपको अपमानित करने की कोशिश नहीं कर रहा हूं, लेकिन मेरी संदेह व्यक्त करने के लिए। – Semo

2

logstash JDBC प्लगइन काम करेगा:

input { 
    jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb" 
    jdbc_user => "root" 
    jdbc_password => "factweavers" 
    # The path to our downloaded jdbc driver 
    jdbc_driver_library => "/home/comp/Downloads/mysql-connector-java-5.1.38.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    # our query 
    schedule => "* * * *" 
    statement => "SELECT" * FROM testtable where Date > :sql_last_value order by Date" 
    use_column_value => true 
    tracking_column => Date 
} 

output { 
    stdout { codec => json_lines } 
    elasticsearch { 
    "hosts" => "localhost:9200" 
    "index" => "test-migrate" 
    "document_type" => "data" 
    "document_id" => "%{personid}" 
    } 
} 
संबंधित मुद्दे