จะทำให้คำสอดคล้องกับ Solr ได้อย่างไร?

ฉันต้องการสร้างรายการคำที่สอดคล้องกับ Solr ซึ่งให้การเกิดขึ้นทั้งหมดของคำที่กำหนดพร้อมบริบท

ตัวอย่างภาษาอังกฤษ:

...bla bla1 <b>dog</b> bla bla 1...
...bla bla2 <b>dog</b> bla bla 2...
...bla bla3 <b>dogs</b> bla bla 3
...bla bla4 <b>dogging</b> bla bla 4...
...bla bla5 <b>dog</b> bla bla 5...

สิ่งสำคัญคือต้องสามารถปรับแต่งขนาดของบริบทได้ (บางครั้งมากกว่า 1 ประโยค)

คำถามของฉัน: ฉันจะทำเช่นนี้กับ Solr ได้อย่างไร

Lucene 4.1 สามารถทำได้ เช่น ด้วย FastVectorHighlighter:

    //indexing
    FieldType offsetsType = new FieldType(TextField.TYPE_STORED);
    offsetsType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
    offsetsType.setStored(true);
    offsetsType.setIndexed(true);   
    offsetsType.setStoreTermVectors(true);
    offsetsType.setStoreTermVectorOffsets(true);
    offsetsType.setStoreTermVectorPositions(true);
    offsetsType.setStoreTermVectorPayloads(true);

    doc.add(new Field("content", fileContent, offsetsType));


    //searching
    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(indexPath)));
    IndexSearcher searcher = new IndexSearcher(reader);
    Analyzer analyzer = StandardAnalyzer(Version.LUCENE_41);
    QueryParser parser = new QueryParser(Version.LUCENE_41, "content", analyzer);
    Query query = parser.parse("dog");
    TopDocs results = searcher.search(query, 10);

    for (int i = 0; i < results.scoreDocs.length; i++) {
            int id = results.scoreDocs[i].doc;
            Document doc = searcher.doc(id);
            FastVectorHighlighter h = new FastVectorHighlighter();
            String[] hs = h.getBestFragments(h.getFieldQuery(query), reader, id, "content", contextSize, 10000);
            if (hs != null)
                    for(String f : hs)
                        System.out.println(" highlight: " + f);
    }

แต่ฉันจะขอให้ Solr ทำเช่นเดียวกันได้อย่างไร

การทดลองของฉันคือสิ่งนี้ (solrconfig.xml):

<fragmentsBuilder name="colored" class="org.apache.solr.highlight.ScoreOrderFragmentsBuilder">
 <lst name="defaults">
 <str name="hl.tag.pre"><![CDATA[
      <b style="background:yellow">,<b style="background:lawgreen">,
      <b style="background:aquamarine">,<b style="background:magenta">,
      <b style="background:palegreen">,<b style="background:coral">,
      <b style="background:wheat">,<b style="background:khaki">,
      <b style="background:lime">,<b style="background:deepskyblue">]]></str>
 <str name="hl.tag.post"><![CDATA[</b>]]></str>
 </lst>
</fragmentsBuilder>

<requestHandler name="drupal" class="solr.SearchHandler" default="true">
...
<str name="hl">true</str>
<str name="hl.fl">content</str>
<int name="hl.snippets">5000</int>
<int name="hl.fragsize">300</int>
<str name="hl.simple.pre"><![CDATA[ <b style="background:yellow"><i> ]]></str>
<str name="hl.simple.post"><![CDATA[ </i></b> ]]></str>
<str name="hl.mergeContiguous">true</str>
<str name="hl.fragListBuilder">single</str>
<str name="hl.useFastVectorHighlighter">true</str>

แต่มันจะให้ส่วนที่ดีหนึ่งส่วนเสมอ (สำหรับแต่ละเอกสาร) แต่ไม่ใช่กับเหตุการณ์ทั้งหมด

ขอบคุณสตีฟ


person steve    schedule 17.02.2013    source แหล่งที่มา
comment
คุณลองใช้ hl.fragsize ให้เล็กลง เช่น 100 หรือเปล่า   -  person arun    schedule 19.02.2013
comment
นอกจากนี้ฉันเดาว่า <str name="hl.simple.post"><![CDATA[ </b></i> ]]></str> ควรเป็นแทน <str name="hl.simple.post"><![CDATA[ </i></b> ]]></str>?   -  person arun    schedule 19.02.2013
comment
ฉันได้ลอง hl.fragsize=100 แล้ว แต่ไม่มีการเปลี่ยนแปลง... ขอบคุณสำหรับข้อเสนอแนะและการแก้ไข hl.simple.post :)   -  person steve    schedule 20.02.2013


คำตอบ (2)


คุณสามารถลองใช้ hl.fragsize=100 และ hl.mergeContiguous=false แล้วดูว่าคุณได้รับชิ้นส่วนจำนวนเท่าใด

(ก่อนที่จะเพิ่มพารามิเตอร์โดยตรงใน SearchHandler ของคุณใน solrconfig.xml คุณสามารถลองใช้ตัวเลือกต่างๆ โดยระบุพารามิเตอร์ทั้งหมดของคุณในแบบสอบถาม เมื่อคุณพบชุดของพารามิเตอร์ที่คุณพอใจแล้ว ให้ใช้พารามิเตอร์เหล่านั้นใน solrconfig)

person arun    schedule 20.02.2013
comment
สวัสดี @arun คุณชี้ให้ฉันไปในทิศทางที่ถูกต้อง! :) Solr การกำหนดค่าถูกต้อง (เมื่อฉันทดสอบ solr โดยตรง มันให้ทุกตัวอย่างอย่างมีความสุข) ปัญหาอยู่ในโมดูล solr ของ drupal ซึ่งฉันใช้ทดสอบผลลัพธ์: มันให้เฉพาะตัวอย่างสุดท้ายเท่านั้น... :(( apachesolr_search.module ( รหัส php): foreach ($response->highlighting->{$doc->id}->$hl_param as $values) { $snippets[$hl_param] = $values; } วิธีแก้ปัญหา: foreach ($response->highlighting->{$doc->id}->$hl_param as $values) { $snippets[] = $values; //add each snippets } - person steve; 11.03.2013

ฉันเพิ่งสนับสนุนแพทช์ http://issues.apache.org/jira/i#browse/LUCENE-5317 ที่อาจจะสนใจ เครื่องห่อ Solr กำลังมาถึง

person Tim Allison    schedule 30.10.2013
comment
นี่ไม่ถือเป็นคำตอบที่นี่ใน SO - person Brian; 31.10.2013
comment
มันทำ ฉันไม่เห็นว่าทำไมมันจะไม่ได้ - person Private; 16.01.2015