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