Java 类org.apache.lucene.search.highlight.Encoder 实例源码
项目:search
文件:BaseFragmentsBuilder.java
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0], to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}
项目:NYBC
文件:BaseFragmentsBuilder.java
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0], to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0], to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0], to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0], to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}
项目:Maskana-Gestor-de-Conocimiento
文件:BaseFragmentsBuilder.java
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0], to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}
项目:lucenestudy
文件:HighlightingHelper.java
HighlightingHelper(Query query, Analyzer analyzer) {
this.analyzer = analyzer;
Formatter formatter = new SimpleHTMLFormatter();
Encoder encoder = new MinimalHTMLEncoder();
scorer = new QueryScorer(query);
highlighter = new Highlighter(formatter, encoder, scorer);
fragmentLength = DEFAULT_FRAGMENT_LENGTH;
Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, fragmentLength);
highlighter.setTextFragmenter(fragmenter);
}
项目:search
文件:BaseFragmentsBuilder.java
@Override
public String createFragment( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, String[] preTags, String[] postTags,
Encoder encoder ) throws IOException {
String[] fragments = createFragments( reader, docId, fieldName, fieldFragList, 1,
preTags, postTags, encoder );
if( fragments == null || fragments.length == 0 ) return null;
return fragments[0];
}
项目:search
文件:BaseFragmentsBuilder.java
@Override
public String[] createFragments( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, int maxNumFragments,
String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
if( maxNumFragments < 0 ) {
throw new IllegalArgumentException( "maxNumFragments(" + maxNumFragments + ") must be positive number." );
}
List<WeightedFragInfo> fragInfos = fieldFragList.getFragInfos();
Field[] values = getFields( reader, docId, fieldName );
if( values.length == 0 ) {
return null;
}
if (discreteMultiValueHighlighting && values.length > 1) {
fragInfos = discreteMultiValueHighlighting(fragInfos, values);
}
fragInfos = getWeightedFragInfoList(fragInfos);
int limitFragments = maxNumFragments < fragInfos.size() ? maxNumFragments : fragInfos.size();
List<String> fragments = new ArrayList<>( limitFragments );
StringBuilder buffer = new StringBuilder();
int[] nextValueIndex = { 0 };
for( int n = 0; n < limitFragments; n++ ){
WeightedFragInfo fragInfo = fragInfos.get( n );
fragments.add( makeFragment( buffer, nextValueIndex, values, fragInfo, preTags, postTags, encoder ) );
}
return fragments.toArray( new String[fragments.size()] );
}
项目:NYBC
文件:BaseFragmentsBuilder.java
@Override
public String createFragment( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, String[] preTags, String[] postTags,
Encoder encoder ) throws IOException {
String[] fragments = createFragments( reader, docId, fieldName, fieldFragList, 1,
preTags, postTags, encoder );
if( fragments == null || fragments.length == 0 ) return null;
return fragments[0];
}
项目:NYBC
文件:BaseFragmentsBuilder.java
@Override
public String[] createFragments( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, int maxNumFragments,
String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
if( maxNumFragments < 0 ) {
throw new IllegalArgumentException( "maxNumFragments(" + maxNumFragments + ") must be positive number." );
}
List<WeightedFragInfo> fragInfos = fieldFragList.getFragInfos();
Field[] values = getFields( reader, docId, fieldName );
if( values.length == 0 ) {
return null;
}
if (discreteMultiValueHighlighting && values.length > 1) {
fragInfos = discreteMultiValueHighlighting(fragInfos, values);
}
fragInfos = getWeightedFragInfoList(fragInfos);
int limitFragments = maxNumFragments < fragInfos.size() ? maxNumFragments : fragInfos.size();
List<String> fragments = new ArrayList<String>( limitFragments );
StringBuilder buffer = new StringBuilder();
int[] nextValueIndex = { 0 };
for( int n = 0; n < limitFragments; n++ ){
WeightedFragInfo fragInfo = fragInfos.get( n );
fragments.add( makeFragment( buffer, nextValueIndex, values, fragInfo, preTags, postTags, encoder ) );
}
return fragments.toArray( new String[fragments.size()] );
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
@Override
public String createFragment( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, String[] preTags, String[] postTags,
Encoder encoder ) throws IOException {
String[] fragments = createFragments( reader, docId, fieldName, fieldFragList, 1,
preTags, postTags, encoder );
if( fragments == null || fragments.length == 0 ) return null;
return fragments[0];
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
@Override
public String[] createFragments( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, int maxNumFragments,
String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
if( maxNumFragments < 0 ) {
throw new IllegalArgumentException( "maxNumFragments(" + maxNumFragments + ") must be positive number." );
}
List<WeightedFragInfo> fragInfos = fieldFragList.getFragInfos();
Field[] values = getFields( reader, docId, fieldName );
if( values.length == 0 ) {
return null;
}
if (discreteMultiValueHighlighting && values.length > 1) {
fragInfos = discreteMultiValueHighlighting(fragInfos, values);
}
fragInfos = getWeightedFragInfoList(fragInfos);
int limitFragments = maxNumFragments < fragInfos.size() ? maxNumFragments : fragInfos.size();
List<String> fragments = new ArrayList<String>( limitFragments );
StringBuilder buffer = new StringBuilder();
int[] nextValueIndex = { 0 };
for( int n = 0; n < limitFragments; n++ ){
WeightedFragInfo fragInfo = fragInfos.get( n );
fragments.add( makeFragment( buffer, nextValueIndex, values, fragInfo, preTags, postTags, encoder ) );
}
return fragments.toArray( new String[fragments.size()] );
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
@Override
public String createFragment( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, String[] preTags, String[] postTags,
Encoder encoder ) throws IOException {
String[] fragments = createFragments( reader, docId, fieldName, fieldFragList, 1,
preTags, postTags, encoder );
if( fragments == null || fragments.length == 0 ) return null;
return fragments[0];
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
@Override
public String[] createFragments( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, int maxNumFragments,
String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
if( maxNumFragments < 0 ) {
throw new IllegalArgumentException( "maxNumFragments(" + maxNumFragments + ") must be positive number." );
}
List<WeightedFragInfo> fragInfos = fieldFragList.getFragInfos();
Field[] values = getFields( reader, docId, fieldName );
if( values.length == 0 ) {
return null;
}
if (discreteMultiValueHighlighting && values.length > 1) {
fragInfos = discreteMultiValueHighlighting(fragInfos, values);
}
fragInfos = getWeightedFragInfoList(fragInfos);
int limitFragments = maxNumFragments < fragInfos.size() ? maxNumFragments : fragInfos.size();
List<String> fragments = new ArrayList<String>( limitFragments );
StringBuilder buffer = new StringBuilder();
int[] nextValueIndex = { 0 };
for( int n = 0; n < limitFragments; n++ ){
WeightedFragInfo fragInfo = fragInfos.get( n );
fragments.add( makeFragment( buffer, nextValueIndex, values, fragInfo, preTags, postTags, encoder ) );
}
return fragments.toArray( new String[fragments.size()] );
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
@Override
public String createFragment( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, String[] preTags, String[] postTags,
Encoder encoder ) throws IOException {
String[] fragments = createFragments( reader, docId, fieldName, fieldFragList, 1,
preTags, postTags, encoder );
if( fragments == null || fragments.length == 0 ) return null;
return fragments[0];
}
项目:read-open-source-code
文件:BaseFragmentsBuilder.java
@Override
public String[] createFragments( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, int maxNumFragments,
String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
if( maxNumFragments < 0 ) {
throw new IllegalArgumentException( "maxNumFragments(" + maxNumFragments + ") must be positive number." );
}
List<WeightedFragInfo> fragInfos = fieldFragList.getFragInfos();
Field[] values = getFields( reader, docId, fieldName );
if( values.length == 0 ) {
return null;
}
if (discreteMultiValueHighlighting && values.length > 1) {
fragInfos = discreteMultiValueHighlighting(fragInfos, values);
}
fragInfos = getWeightedFragInfoList(fragInfos);
int limitFragments = maxNumFragments < fragInfos.size() ? maxNumFragments : fragInfos.size();
List<String> fragments = new ArrayList<>( limitFragments );
StringBuilder buffer = new StringBuilder();
int[] nextValueIndex = { 0 };
for( int n = 0; n < limitFragments; n++ ){
WeightedFragInfo fragInfo = fragInfos.get( n );
fragments.add( makeFragment( buffer, nextValueIndex, values, fragInfo, preTags, postTags, encoder ) );
}
return fragments.toArray( new String[fragments.size()] );
}
项目:Maskana-Gestor-de-Conocimiento
文件:BaseFragmentsBuilder.java
@Override
public String createFragment( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, String[] preTags, String[] postTags,
Encoder encoder ) throws IOException {
String[] fragments = createFragments( reader, docId, fieldName, fieldFragList, 1,
preTags, postTags, encoder );
if( fragments == null || fragments.length == 0 ) return null;
return fragments[0];
}
项目:Maskana-Gestor-de-Conocimiento
文件:BaseFragmentsBuilder.java
@Override
public String[] createFragments( IndexReader reader, int docId,
String fieldName, FieldFragList fieldFragList, int maxNumFragments,
String[] preTags, String[] postTags, Encoder encoder ) throws IOException {
if( maxNumFragments < 0 ) {
throw new IllegalArgumentException( "maxNumFragments(" + maxNumFragments + ") must be positive number." );
}
List<WeightedFragInfo> fragInfos = fieldFragList.getFragInfos();
Field[] values = getFields( reader, docId, fieldName );
if( values.length == 0 ) {
return null;
}
if (discreteMultiValueHighlighting && values.length > 1) {
fragInfos = discreteMultiValueHighlighting(fragInfos, values);
}
fragInfos = getWeightedFragInfoList(fragInfos);
int limitFragments = maxNumFragments < fragInfos.size() ? maxNumFragments : fragInfos.size();
List<String> fragments = new ArrayList<String>( limitFragments );
StringBuilder buffer = new StringBuilder();
int[] nextValueIndex = { 0 };
for( int n = 0; n < limitFragments; n++ ){
WeightedFragInfo fragInfo = fragInfos.get( n );
fragments.add( makeFragment( buffer, nextValueIndex, values, fragInfo, preTags, postTags, encoder ) );
}
return fragments.toArray( new String[fragments.size()] );
}
项目:elasticsearch_my
文件:CustomPassageFormatter.java
public CustomPassageFormatter(String preTag, String postTag, Encoder encoder) {
this.preTag = preTag;
this.postTag = postTag;
this.encoder = encoder;
}
项目:elasticsearch_my
文件:CustomPassageFormatter.java
public CustomPassageFormatter(String preTag, String postTag, Encoder encoder) {
this.preTag = preTag;
this.postTag = postTag;
this.encoder = encoder;
}
项目:elasticsearch_my
文件:SourceScoreOrderFragmentsBuilder.java
@Override
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
return super.makeFragment(buffer, index, values, FragmentBuilderHelper.fixWeightedFragInfo(mapper, values, fragInfo),
preTags, postTags, encoder);
}
项目:elasticsearch_my
文件:SimpleFragmentsBuilder.java
@Override
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
return super.makeFragment(buffer, index, values, FragmentBuilderHelper.fixWeightedFragInfo(mapper, values, fragInfo),
preTags, postTags, encoder);
}
项目:Elasticsearch
文件:CustomPassageFormatter.java
public CustomPassageFormatter(String preTag, String postTag, Encoder encoder) {
this.preTag = preTag;
this.postTag = postTag;
this.encoder = encoder;
}
项目:Elasticsearch
文件:SourceScoreOrderFragmentsBuilder.java
@Override
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
return super.makeFragment(buffer, index, values, FragmentBuilderHelper.fixWeightedFragInfo(mapper, values, fragInfo), preTags, postTags, encoder);
}
项目:Elasticsearch
文件:SimpleFragmentsBuilder.java
@Override
protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
return super.makeFragment(buffer, index, values, FragmentBuilderHelper.fixWeightedFragInfo(mapper, values, fragInfo), preTags, postTags, encoder);
}
项目:search
文件:FastVectorHighlighterTest.java
public void testMultiValuedSortByScore() throws IOException {
Directory dir = newDirectory();
IndexWriter writer = new IndexWriter( dir, newIndexWriterConfig(new MockAnalyzer( random() ) ) );
Document doc = new Document();
FieldType type = new FieldType( TextField.TYPE_STORED );
type.setStoreTermVectorOffsets( true );
type.setStoreTermVectorPositions( true );
type.setStoreTermVectors( true );
type.freeze();
doc.add( new Field( "field", "zero if naught", type ) ); // The first two fields contain the best match
doc.add( new Field( "field", "hero of legend", type ) ); // but total a lower score (3) than the bottom
doc.add( new Field( "field", "naught of hero", type ) ); // two fields (4)
doc.add( new Field( "field", "naught of hero", type ) );
writer.addDocument(doc);
FastVectorHighlighter highlighter = new FastVectorHighlighter();
ScoreOrderFragmentsBuilder fragmentsBuilder = new ScoreOrderFragmentsBuilder();
fragmentsBuilder.setDiscreteMultiValueHighlighting( true );
IndexReader reader = DirectoryReader.open(writer, true );
String[] preTags = new String[] { "<b>" };
String[] postTags = new String[] { "</b>" };
Encoder encoder = new DefaultEncoder();
int docId = 0;
BooleanQuery query = new BooleanQuery();
query.add( clause( "field", "hero" ), Occur.SHOULD);
query.add( clause( "field", "of" ), Occur.SHOULD);
query.add( clause( "field", "legend" ), Occur.SHOULD);
FieldQuery fieldQuery = highlighter.getFieldQuery( query, reader );
for ( FragListBuilder fragListBuilder : new FragListBuilder[] {
new SimpleFragListBuilder(), new WeightedFragListBuilder() } ) {
String[] bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", 20, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
assertEquals("<b>hero</b> <b>of</b> <b>legend</b>", bestFragments[0]);
bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", 28, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
assertEquals("<b>hero</b> <b>of</b> <b>legend</b>", bestFragments[0]);
bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", 30000, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
assertEquals("<b>hero</b> <b>of</b> <b>legend</b>", bestFragments[0]);
}
reader.close();
writer.close();
dir.close();
}
项目:search
文件:FastVectorHighlighterTest.java
private void matchedFieldsTestCase( boolean useMatchedFields, boolean fieldMatch, String fieldValue, String expected, Query... queryClauses ) throws IOException {
Document doc = new Document();
FieldType stored = new FieldType( TextField.TYPE_STORED );
stored.setStoreTermVectorOffsets( true );
stored.setStoreTermVectorPositions( true );
stored.setStoreTermVectors( true );
stored.freeze();
FieldType matched = new FieldType( TextField.TYPE_NOT_STORED );
matched.setStoreTermVectorOffsets( true );
matched.setStoreTermVectorPositions( true );
matched.setStoreTermVectors( true );
matched.freeze();
doc.add( new Field( "field", fieldValue, stored ) ); // Whitespace tokenized with English stop words
doc.add( new Field( "field_exact", fieldValue, matched ) ); // Whitespace tokenized without stop words
doc.add( new Field( "field_super_exact", fieldValue, matched ) ); // Whitespace tokenized without toLower
doc.add( new Field( "field_characters", fieldValue, matched ) ); // Each letter is a token
doc.add( new Field( "field_tripples", fieldValue, matched ) ); // Every three letters is a token
doc.add( new Field( "field_sliced", fieldValue.substring( 0, // Sliced at 10 chars then analyzed just like field
Math.min( fieldValue.length() - 1 , 10 ) ), matched ) );
doc.add( new Field( "field_der_red", new CannedTokenStream( // Hacky field containing "der" and "red" at pos = 0
token( "der", 1, 0, 3 ),
token( "red", 0, 0, 3 )
), matched ) );
final Map<String, Analyzer> fieldAnalyzers = new TreeMap<>();
fieldAnalyzers.put( "field", new MockAnalyzer( random(), MockTokenizer.WHITESPACE, true, MockTokenFilter.ENGLISH_STOPSET ) );
fieldAnalyzers.put( "field_exact", new MockAnalyzer( random() ) );
fieldAnalyzers.put( "field_super_exact", new MockAnalyzer( random(), MockTokenizer.WHITESPACE, false ) );
fieldAnalyzers.put( "field_characters", new MockAnalyzer( random(), new CharacterRunAutomaton( new RegExp(".").toAutomaton() ), true ) );
fieldAnalyzers.put( "field_tripples", new MockAnalyzer( random(), new CharacterRunAutomaton( new RegExp("...").toAutomaton() ), true ) );
fieldAnalyzers.put( "field_sliced", fieldAnalyzers.get( "field" ) );
fieldAnalyzers.put( "field_der_red", fieldAnalyzers.get( "field" ) ); // This is required even though we provide a token stream
Analyzer analyzer = new DelegatingAnalyzerWrapper(Analyzer.PER_FIELD_REUSE_STRATEGY) {
public Analyzer getWrappedAnalyzer(String fieldName) {
return fieldAnalyzers.get( fieldName );
}
};
Directory dir = newDirectory();
IndexWriter writer = new IndexWriter( dir, newIndexWriterConfig(analyzer));
writer.addDocument( doc );
FastVectorHighlighter highlighter = new FastVectorHighlighter();
FragListBuilder fragListBuilder = new SimpleFragListBuilder();
FragmentsBuilder fragmentsBuilder = new ScoreOrderFragmentsBuilder();
IndexReader reader = DirectoryReader.open( writer, true );
String[] preTags = new String[] { "<b>" };
String[] postTags = new String[] { "</b>" };
Encoder encoder = new DefaultEncoder();
int docId = 0;
BooleanQuery query = new BooleanQuery();
for ( Query clause : queryClauses ) {
query.add( clause, Occur.MUST );
}
FieldQuery fieldQuery = new FieldQuery( query, reader, true, fieldMatch );
String[] bestFragments;
if ( useMatchedFields ) {
Set< String > matchedFields = new HashSet<>();
matchedFields.add( "field" );
matchedFields.add( "field_exact" );
matchedFields.add( "field_super_exact" );
matchedFields.add( "field_characters" );
matchedFields.add( "field_tripples" );
matchedFields.add( "field_sliced" );
matchedFields.add( "field_der_red" );
bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", matchedFields, 25, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
} else {
bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", 25, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
}
assertEquals( expected, bestFragments[ 0 ] );
reader.close();
writer.close();
dir.close();
}
项目:search
文件:HtmlEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new SimpleHTMLEncoder();
}
项目:search
文件:DefaultEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new org.apache.lucene.search.highlight.DefaultEncoder();
}
项目:community-edition-old
文件:AlfrescoSolrHighlighter.java
private void alternateField(NamedList docSummaries, SolrParams params, Document doc, String requestFieldname, String schemaFieldName, SolrQueryRequest req)
{
String requestAlternateField = params.getFieldParam(requestFieldname, HighlightParams.ALTERNATE_FIELD);
if (requestAlternateField != null && requestAlternateField.length() > 0)
{
String schemaAlternateFieldName = AlfrescoSolrDataModel.getInstance().mapProperty(requestAlternateField, FieldUse.HIGHLIGHT, req);
IndexableField[] docFields = doc.getFields(schemaAlternateFieldName);
if (docFields.length == 0)
{
// The alternate field did not exist, treat the original field as fallback instead
docFields = doc.getFields(schemaFieldName);
}
List<String> listFields = new ArrayList<>();
for (IndexableField field : docFields)
{
if (field.binaryValue() == null)
listFields.add(field.stringValue());
}
String[] altTexts = listFields.toArray(new String[listFields.size()]);
if (altTexts != null && altTexts.length > 0)
{
Encoder encoder = getEncoder(requestFieldname, params);
int alternateFieldLen = params.getFieldInt(requestFieldname, HighlightParams.ALTERNATE_FIELD_LENGTH, 0);
List<String> altList = new ArrayList<>();
int len = 0;
for (String altText : altTexts)
{
if (alternateFieldLen <= 0)
{
altList.add(encoder.encodeText(altText));
}
else
{
altList.add(len + altText.length() > alternateFieldLen ? encoder.encodeText(new String(altText.substring(0, alternateFieldLen - len))) : encoder
.encodeText(altText));
len += altText.length();
if (len >= alternateFieldLen)
break;
}
}
docSummaries.add(requestFieldname, altList);
}
}
}
项目:NYBC
文件:HtmlEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new SimpleHTMLEncoder();
}
项目:NYBC
文件:DefaultEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new org.apache.lucene.search.highlight.DefaultEncoder();
}
项目:search-core
文件:HtmlEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new SimpleHTMLEncoder();
}
项目:search-core
文件:DefaultEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new org.apache.lucene.search.highlight.DefaultEncoder();
}
项目:read-open-source-code
文件:HtmlEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new SimpleHTMLEncoder();
}
项目:read-open-source-code
文件:DefaultEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new org.apache.lucene.search.highlight.DefaultEncoder();
}
项目:read-open-source-code
文件:HtmlEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new SimpleHTMLEncoder();
}
项目:read-open-source-code
文件:DefaultEncoder.java
@Override
public Encoder getEncoder(String fieldName, SolrParams params) {
return new org.apache.lucene.search.highlight.DefaultEncoder();
}
项目:Maskana-Gestor-de-Conocimiento
文件:FastVectorHighlighterTest.java
private void matchedFieldsTestCase( boolean useMatchedFields, boolean fieldMatch, String fieldValue, String expected, Query... queryClauses ) throws IOException {
Document doc = new Document();
FieldType stored = new FieldType( TextField.TYPE_STORED );
stored.setStoreTermVectorOffsets( true );
stored.setStoreTermVectorPositions( true );
stored.setStoreTermVectors( true );
stored.freeze();
FieldType matched = new FieldType( TextField.TYPE_NOT_STORED );
matched.setStoreTermVectorOffsets( true );
matched.setStoreTermVectorPositions( true );
matched.setStoreTermVectors( true );
matched.freeze();
doc.add( new Field( "field", fieldValue, stored ) ); // Whitespace tokenized with English stop words
doc.add( new Field( "field_exact", fieldValue, matched ) ); // Whitespace tokenized without stop words
doc.add( new Field( "field_super_exact", fieldValue, matched ) ); // Whitespace tokenized without toLower
doc.add( new Field( "field_characters", fieldValue, matched ) ); // Each letter is a token
doc.add( new Field( "field_tripples", fieldValue, matched ) ); // Every three letters is a token
doc.add( new Field( "field_sliced", fieldValue.substring( 0, // Sliced at 10 chars then analyzed just like field
Math.min( fieldValue.length() - 1 , 10 ) ), matched ) );
doc.add( new Field( "field_der_red", new CannedTokenStream( // Hacky field containing "der" and "red" at pos = 0
token( "der", 1, 0, 3 ),
token( "red", 0, 0, 3 )
), matched ) );
final Map<String, Analyzer> fieldAnalyzers = new TreeMap<String, Analyzer>();
fieldAnalyzers.put( "field", new MockAnalyzer( random(), MockTokenizer.WHITESPACE, true, MockTokenFilter.ENGLISH_STOPSET ) );
fieldAnalyzers.put( "field_exact", new MockAnalyzer( random() ) );
fieldAnalyzers.put( "field_super_exact", new MockAnalyzer( random(), MockTokenizer.WHITESPACE, false ) );
fieldAnalyzers.put( "field_characters", new MockAnalyzer( random(), new CharacterRunAutomaton( new RegExp(".").toAutomaton() ), true ) );
fieldAnalyzers.put( "field_tripples", new MockAnalyzer( random(), new CharacterRunAutomaton( new RegExp("...").toAutomaton() ), true ) );
fieldAnalyzers.put( "field_sliced", fieldAnalyzers.get( "field" ) );
fieldAnalyzers.put( "field_der_red", fieldAnalyzers.get( "field" ) ); // This is required even though we provide a token stream
Analyzer analyzer = new AnalyzerWrapper() {
public Analyzer getWrappedAnalyzer(String fieldName) {
return fieldAnalyzers.get( fieldName );
}
};
Directory dir = newDirectory();
IndexWriter writer = new IndexWriter( dir, newIndexWriterConfig( TEST_VERSION_CURRENT, analyzer ) );
writer.addDocument( doc );
FastVectorHighlighter highlighter = new FastVectorHighlighter();
FragListBuilder fragListBuilder = new SimpleFragListBuilder();
FragmentsBuilder fragmentsBuilder = new ScoreOrderFragmentsBuilder();
IndexReader reader = DirectoryReader.open( writer, true );
String[] preTags = new String[] { "<b>" };
String[] postTags = new String[] { "</b>" };
Encoder encoder = new DefaultEncoder();
int docId = 0;
BooleanQuery query = new BooleanQuery();
for ( Query clause : queryClauses ) {
query.add( clause, Occur.MUST );
}
FieldQuery fieldQuery = new FieldQuery( query, reader, true, fieldMatch );
String[] bestFragments;
if ( useMatchedFields ) {
Set< String > matchedFields = new HashSet< String >();
matchedFields.add( "field" );
matchedFields.add( "field_exact" );
matchedFields.add( "field_super_exact" );
matchedFields.add( "field_characters" );
matchedFields.add( "field_tripples" );
matchedFields.add( "field_sliced" );
matchedFields.add( "field_der_red" );
bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", matchedFields, 25, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
} else {
bestFragments = highlighter.getBestFragments( fieldQuery, reader, docId, "field", 25, 1,
fragListBuilder, fragmentsBuilder, preTags, postTags, encoder );
}
assertEquals( expected, bestFragments[ 0 ] );
reader.close();
writer.close();
dir.close();
}