Bagaimana cara membuat konkordansi kata dengan Solr?

Saya ingin membuat daftar sasaran konkordansi kata dengan Solr, yang memberikan semua kemunculan dari kata tertentu beserta konteksnya.

Contoh bahasa Inggris:

...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...

Penting untuk dapat menyesuaikan ukuran konteksnya. (Terkadang lebih dari 1 kalimat.)

Pertanyaan saya: bagaimana cara melakukan ini dengan Solr?

Lucene 4.1 mampu melakukan ini, misalnya dengan 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);
    }

Tapi bagaimana saya bisa meminta Solr melakukan hal yang sama?

Uji coba saya adalah ini (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>

Tapi itu selalu memberikan satu fragmen bagus (untuk setiap dokumen), tapi tidak dengan semua kemunculan.

Terima kasih, Steve


person steve    schedule 17.02.2013    source sumber
comment
Apakah Anda mencoba dengan hl.fragsize yang lebih kecil, katakanlah 100?   -  person arun    schedule 19.02.2013
comment
Saya juga kira <str name="hl.simple.post"><![CDATA[ </b></i> ]]></str> seharusnya menjadi <str name="hl.simple.post"><![CDATA[ </i></b> ]]></str>?   -  person arun    schedule 19.02.2013
comment
Saya sudah mencoba hl.fragsize=100, tetapi tidak ada perubahan... Terima kasih atas saran dan koreksi hl.simple.post :)   -  person steve    schedule 20.02.2013


Jawaban (2)


Bisakah Anda mencoba dengan hl.fragsize=100 dan hl.mergeContiguous=false dan melihat berapa banyak fragmen yang Anda dapatkan?

(Sebelum menambahkan param secara langsung di SearchHandler Anda di solrconfig.xml, Anda dapat mencoba berbagai opsi dengan menentukan semua param Anda dalam kueri. Setelah Anda menemukan sekumpulan param yang Anda sukai, gunakan parameter tersebut di solrconfig.)

person arun    schedule 20.02.2013
comment
hai @arun, Anda mengarahkan saya ke arah yang benar! :) Solr konfigurasi sudah benar. (ketika saya menguji solr secara langsung, ia memberikan setiap cuplikan dengan senang hati) Masalahnya ada di modul solr drupal, yang saya gunakan untuk menguji hasilnya: ia hanya memberikan cuplikan terakhir... :(( apachesolr_search.module ( kode php): foreach ($response->highlighting->{$doc->id}->$hl_param as $values) { $snippets[$hl_param] = $values; } Solusi: foreach ($response->highlighting->{$doc->id}->$hl_param as $values) { $snippets[] = $values; //add each snippets } - person steve; 11.03.2013

Saya baru saja menyumbangkan patch http://issues.apache.org/jira/i#browse/LUCENE-5317 yang mungkin menarik. Pembungkus Solr sedang dalam perjalanan.

person Tim Allison    schedule 30.10.2013
comment
Ini sebenarnya bukan jawaban di SO. - person Brian; 31.10.2013
comment
Memang benar. Saya tidak mengerti mengapa hal itu tidak terjadi. - person Private; 16.01.2015