2013-01-12 17 views
8

का उपयोग कर लोचदार खोज पूर्ण पाठ खोज मैंने हाल ही में खोज की दुनिया की खोज शुरू कर दी है, और मैं अपने मोंगोडीबी के लिए सूचकांक के रूप में ES का उपयोग करने की कोशिश कर रहा हूं। मैंने उन्हें सफलतापूर्वक एकीकृत करने में कामयाब रहा है, लेकिन मुझे खोज एपीआई बल्कि जटिल और भ्रमित लगता है। जावा एपीआई या तो बहुत उपयोगी नहीं है। मैं सटीक मिलान ढूंढने में सक्षम हूं, लेकिन मैं पूर्ण-पाठ खोज कैसे करूं?जावा एपीआई

Settings settings = ImmutableSettings.settingsBuilder() 
    .put("cluster.name", "elasticsearch").build(); 
Client client = new TransportClient(settings) 
    .addTransportAddress(new InetSocketTransportAddress("host-ip", 9300)); 
SearchResponse response = client.prepareSearch("mongoindex") 
    .setSearchType(SearchType.QUERY_AND_FETCH) 
    .setQuery(termQuery("name", "*name*")) 
    .setFrom(0).setSize(60).setExplain(true) 
    .execute() 
    .actionGet(); 

मैं कोई समस्या नहीं .setQuery(termQuery("name", "testname")) का उपयोग कर "name":"testname" खोजने है, लेकिन "name":"this is a test name" ऊपर के उदाहरण के साथ काम नहीं करता है: यहाँ मेरी कोड है। मैं क्या गलत कर रहा हूं?

+0

सिर्फ डेटाबेस है कि मैं का उपयोग कर रहा है कि को देखने के लिए। –

उत्तर

8

घंटों तक इंटरनेट को क्रॉल करने के बाद, मैंने इसे javadocs से कुछ मदद के साथ समझने में कामयाब रहा है। इंटरफ़ेस *QueryBuilder*, और इसके कार्यान्वयन वर्ग सबसे महत्वपूर्ण है। मैंने अपनी क्वेरी के लिए FieldQueryBuilder का उपयोग किया, जो नीचे setQuery विधि में दिखाया गया है।

SearchResponse response = client.prepareSearch("mongoindex") 
    .setSearchType(SearchType.QUERY_AND_FETCH) 
    .setQuery(fieldQuery("name", "test name")) 
    .setFrom(0).setSize(60).setExplain(true) 
    .execute() 
    .actionGet(); 
SearchHit[] results = response.getHits().getHits(); 
for (SearchHit hit : results) { 
    System.out.println(hit.getId()); //prints out the id of the document 
    Map<String,Object> result = hit.getSource(); //the retrieved document 
} 
जिसके परिणामस्वरूप मानचित्र वस्तु के साथ

, तो आप बस प्रासंगिक डेटा पुनः प्राप्त करने get विधि कॉल कर सकते हैं।

0

ऐसा लगता है कि termQuery in elasticsearch इसके खोज वाक्यविन्यास के लिए ल्यूसेंस का उपयोग करता है। Lucene docs के अनुसार "*" वाइल्डकार्ड को खोज की पहली अवधि के रूप में अनुमति नहीं है।

+0

यदि ऐसा है, तो मैं पाठ के भीतर एक वाक्यांश (या सबस्ट्रिंग) कैसे खोज सकता हूं? –

+0

मुझे लगता है कि एक query_string का उपयोग कर http://www.elasticsearch.org/guide/reference/query-dsl/query-string-query.html – mjhm

+0

दुर्भाग्य से, यह जावा में नहीं है, जो वास्तव में मेरे प्रश्न का क्रूक्स है, क्योंकि मैं जावा एपीआई का उपयोग कर रहा हूं। मैंने लिंक देखा है लेकिन मैं इसे जावा में अनुवाद नहीं कर सकता। –

संबंधित मुद्दे