Solr

2011-09-06 12 views
6

प्रिय stackoverflow समुदाय के साथ एक टैग बादल का निर्माण:Solr

कुछ पाठ देखते हुए, मैं पाठ में टॉप 50 सबसे लगातार शब्द पाने के लिए, और इसे से बाहर एक टैग बादल बनाने के लिए, और इस प्रकार का सार दिखाने इच्छा ग्राफिकल तरीके से पाठ क्या है।

टेक्स्ट वास्तव में प्रत्येक आइटम के लिए 100 या तो टिप्पणियों का एक सेट है (एक तस्वीर) लगभग 120 आइटम हैं, और मैं बादल को अद्यतन रखना चाहता हूं - टिप्पणियों को अनुक्रमित करके, और क्लाउड का उपयोग करके हर बार एक नया वेब अनुरोध चालू होने के लिए पीढ़ी कोड चलाने के लिए।

मैं टेक्स्ट को इंडेक्स करने के लिए सोलर का उपयोग करने पर बस गया, और अब सोच रहा हूं कि सोलर TermsVectorComponant से शीर्ष 50 शब्द कैसे प्राप्त करें। यहाँ शर्तों वेक्टर componant द्वारा लौटाए गए परिणामों का एक उदाहरण है, के बाद आप tv.tf="true" कह कर अवधि आवृत्ति पर बारी:

  1. मैं सभी मिलती है:

    <lst name="doc-5"> 
        <str name="uniqueKey">MA147LL/A</str>  
        <lst name="includes"> 
         <lst name="cabl"><tf>5</tf></lst> 
         <lst name="earbud"><tf>3</tf></lst> 
         <lst name="headphon"><tf>10</tf></lst> 
         <lst name="usb"><tf>11</tf></lst> 
        </lst> 
        </lst> 
    
        <lst name="doc-9"> 
        <str name="uniqueKey">3007WFP</str> 
        <lst name="includes"> 
         <lst name="cabl"><tf>5</tf></lst> 
         <lst name="usb"><tf>4</tf></lst> 
        </lst> 
        </lst> 
    

    आप देख सकते हैं मैं 2 समस्या है दस्तावेज़ के भीतर शब्द, उस फ़ील्ड के लिए, न केवल शीर्ष 100

  2. और वे आवृत्ति द्वारा क्रमबद्ध नहीं हैं, इसलिए मुझे नियमों को प्राप्त करना होगा और यह कोशिश करने के लिए इसे स्मृति में सॉर्ट करना होगा।

क्या कोई बेहतर तरीका है? (या) क्या मैं किसी भी तरह से सॉल्वर टर्मवेक्टर घटक को सॉर्ट कर सकता हूं और मेरे लिए केवल 100 चुन सकता हूं? (या) क्या कोई अन्य ढांचा है जिसका मैं उपयोग कर सकता हूं? मुझे आने वाली नई टिप्पणियों को अनुक्रमित रखने की आवश्यकता है, इसलिए टैग क्लाउड हमेशा अपरिवर्तित होता है - क्लाउड जनरेटर के रूप में यह भारित शब्दों का एक शब्दकोश लेता है, और इसे एक अच्छी छवि में बनाता है।

This उत्तर मदद नहीं करता है। ,

select?q=Id:d4439543-afd4-42fb-978a-b72eab0c07f9&facet=true 
&facet.field=Post_Content&facet.minCount=1&facet.limit=50 

<int name="also">1</int> 
<int name="ani">1</int> 
<int name="anoth">1</int> 
<int name="atleast">1</int> 
<int name="base">1</int> 
<int name="bcd">1</int> 
<int name="becaus">1</int> 
<int name="better">1</int> 
<int name="bigger">1</int> 
<int name="bio">1</int> 
<int name="boot">1</int> 
<int name="bootabl">1</int> 
<int name="bootload">1</int> 
<int name="bootscreen">1</int> 

मैं 50 ऐसे तत्वों मिला सीमा की मदद करने के लिए धन्यवाद @jpountz: -

संपादित jpountz & paige कुक के जवाब

यहाँ बाहर की कोशिश कर रहा एक परिणाम है जो मुझे इस प्रश्न के लिए मिल गया है परिणाम, लेकिन व्यक्तिगत <int> तत्वों की सभी फिफ्टी मूल्य क्यों मानती है? मेरे विचार हैं: संख्या 1 मेरी क्वेरी से मेल खाने वाले दस्तावेज़ों की गिनती का प्रतिनिधित्व करता है (जो केवल आईडी द्वारा पूछे जाने वाले प्रश्नों में से एक हो सकता है: और वे Post_Content

में यह साबित करने के लिए शब्दों की आवृत्ति का प्रतिनिधित्व नहीं करते हैं I ईद हटाया: क्वेरी और परिणाम से GUID था:

<int name="content">33</int> 
<int name="can">17</int> 
<int name="on">16</int> 
<int name="so">16</int> 
<int name="some">16</int> 
<int name="all">15</int> 
<int name="i">15</int> 
<int name="do">14</int> 
<int name="have">14</int> 
<int name="my">14</int> 

मेरे समस्या कैसे दस्तावेज़ में अवधि आवृत्ति, और नहीं कई शर्तों के दस्तावेज़ आवृत्ति प्राप्त करने के लिए है। उदाहरण के लिए, मुझे एक तथ्य के बारे में पता है कि बूट करने योग्य एक शब्द था जिसे मैंने पोस्ट_कॉन्सेन्ट में 6 बार इस्तेमाल किया था, इसलिए मैं दस्तावेजों के एक सेट के लिए जोड़े (6, "बूट करने योग्य"), (5, "डिस्क") जैसे सॉर्ट करना चाहता हूं।

+0

विशेष रूप से कार्यात्मक क्वेरी कि हम इस उद्देश्य के लिए, का उपयोग कर सकते है? – Zasz

+0

तत्व पहलू परिणामों में दिखाई दिए। – Zasz

उत्तर

0

मैं एक कामचलाऊ समाधान के साथ आए हैं: (आईएम एक प्रत्येक Solr दस्तावेज़ बुला उदाहरण खातिर "पोस्ट करें")

Solr में एक मामले घटक, जिसका उद्देश्य बेनकाब करने के लिए सभी अनुक्रमित हो रहा है नहीं है किसी भी दिए गए क्षेत्र की शर्तें। इसका मुख्य रूप से ऑटो-पूर्ण, और अन्य सुविधाओं को लागू करने के लिए उपयोग किया जाता है जो टर्म स्तर पर संचालित होते हैं। और यह डिफ़ॉल्ट रूप से आवृत्ति द्वारा क्रमबद्ध है - क्षेत्र में अधिक बार होने वाली शब्द पहले आती हैं।

क्या मैंने किया है एक गतिशील क्षेत्र बनाई गई है content_ कहा जाता है और अनुक्रमित प्रत्येक श्रेणी के आधार पर अपने स्वयं के क्षेत्र में बाद निर्धारित किया है। इसका मतलब है कि गतिशील क्षेत्र से युक्त एक के बाद सेट के उदाहरण के सैकड़ों हो जाएगा, और मुझे लगता है कि बाद के सेट के लिए शीर्ष शब्द पाने के लिए है कि मैदान पर शर्तों घटक का उपयोग कर सकते हैं।

एक तस्वीर के रूप में:

content_postSetOne : contains indexed version of a set of posts 
content_postSetTwo : contains indexed version of another set of posts 
content_postSetThree : contains indexed version of a third set of posts 

यह समाधान एक तरह से मेरे लिए काम कर रहा है, और आप आसानी से भी पोस्ट प्रति एक क्षेत्र बना सकते हैं यदि आवश्यक हो। मैं इस तरह गतिशील क्षेत्रों का उपयोग करने के प्रभावों को जानने में भी रूचि रखता हूं: क्या यह एक समस्या होगी?

यह कैसे Paige और jPountz जवाब से अलग है:

  1. अवधि आवृत्ति 'ए' में शब्दों की गिनती या "डॉक्स का सेट" और नहीं युक्त डॉक्स की गिनती शामिल है अवधि।
  2. मैं एक दस्तावेज़ से शीर्ष होने वाली शर्तों प्राप्त कर सकते हैं, और यदि दस्तावेजों के एक सेट से भी जरूरत है।
  3. मैं faceting का उपयोग नहीं किया है क्योंकि यह मुख्य रूप से किए गए दस्तावेज़ों की संख्या के मामले में आवृत्ति देता है और समय की संख्या के मामले में नहीं शब्द जो दस्तावेज़ पर ध्यान दिए बिना हुई।
+0

यदि कोई बेहतर उत्तर आ जाएगा, तो मैं खुशी से उन्हें सही के रूप में चिह्नित करें, मेरा रद्द करना। – Zasz

1

यदि ल्यूसीन दस्तावेज़ एक टिप्पणी है, तो आप ऐसा करने के लिए पहलू का उपयोग कर सकते हैं। उदाहरण के लिए, निम्नलिखित अनुरोध http://solr:port/solr/select?q={!lucene}uniqueKey:(MA147LL/A OR 3007WFP)&facet=true&facet.field=includes&facet.minCount=1&facet.limit=50 टिप्पणियों के लिए टैग क्लाउड बनाने में आपकी सहायता करेगा MA147LL/A और 3007WFP

हालांकि, इस पद्धति होगा:

  • Solr includes क्षेत्र है, जो स्मृति की आवश्यकता के लिए एक UnInvertedField उदाहरण का दृष्टांत बनाने,
  • दस्तावेज है जो घटनाओं की कुल संख्या के बजाय एक शब्द से मेल खाते की संख्या की गणना इस शब्द का।
+0

अरे मैं बाहर की कोशिश की है कि तुम क्या कहा कि मैं अजीब परिणाम है, मैं मेरे सवाल – Zasz

5

यहां एक लेख है जो टैग क्लाउड - Creating a Tag Cloud with Solr and PHP स्थापित करने का वर्णन करता है। जबकि पीएचपी भाग आप पर लागू नहीं हो सकता है, टैग बादल मेरा मानना ​​है कि है की वास्तविक पीढ़ी ...

यह लेख एक खाली स्थान के tokenizer अलग-अलग शब्द वापस जाने के लिए के साथ एक पाठ क्षेत्र बनाने और उसके बाद एक प्रदर्शन करने की एक विधि का वर्णन करता है इस क्षेत्र के खिलाफ पहलू खोज। मुझे पता है कि आप पहलू सीमा निर्धारित कर सकते हैं, इसलिए आपके मामले में आप केवल शीर्ष 100 परिणाम प्राप्त कर सकते हैं।

+0

मैं लेख को देखने की थी संपादित किया है और किया हो रही है कि वहाँ क्या कहा जाता है - जो अनिवार्य रूप से है जो सामग्री शामिल है मेरे खेत पर एक faceting करते हैं, मैं यह कर सकते हैं टॉप एक्स लगातार शब्दों को प्राप्त नहीं करते हैं, इसके बजाय मुझे परिणाम मिलता है जिसे मैंने – Zasz

+0

में चिपकाया है, जो मैंने आपके उत्तर की कोशिश करने के बाद और @jpountz से एक जानकारी के आधार पर जोड़ा है। आपको दो अलग-अलग प्रश्नों को निष्पादित करने की आवश्यकता होगी। 1. उन दस्तावेज़ों के साथ जिन्हें आप प्रदर्शित करना चाहते हैं। (निर्दिष्ट विकल्प पहलू नहीं) 2।एक पहलू केवल क्वेरी जहां आप सभी दस्तावेजों में खोज करते हैं 'q = *: * और facet = true और facet.field = Post_Content & facet.minCount = 1 और facet.limit = 50' और पहलू परिणामों से अपना टैग क्लाउड बनाएं। –

+0

मैं सिर्फ एक दस्तावेज़, एक फ़ील्ड से सामग्री के साथ क्लाउड बना रहा हूं! - बिंदु संख्या 1 के लिए = मुझे ऐसी क्वेरी लिखने की आवश्यकता नहीं है क्योंकि मुझे उस दस्तावेज़ की आईडी पता है जिसके लिए मैं क्लाउड बनाना चाहता हूं। बिंदु संख्या 2 के लिए यदि मैं सभी दस्तावेजों पर ध्यान केंद्रित करता हूं, तो मुझे सभी दस्तावेज़ों में शीर्ष लगातार शर्तें मिलेंगी, जिसका अर्थ है कि TOPMOST शब्द किसी भी दस्तावेज़ में हो सकता है क्योंकि हम q = *: * का उपयोग करते हैं! मुझे अपने एक डॉक्टर में शीर्ष फ्रीक टर्म की आवश्यकता है, जिसे मैं जानता हूं, और किसकी सामग्री क्लाउड बनने जा रही है। स्पष्टीकरण के लिए – Zasz

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