- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 solr,我尝试使用 hl.formatter 选项和 hl.simple.pre/post 突出显示一些文本。
我的问题是 hl.simple.pre/post 代码有时没有出现在突出显示的结果中,我不明白为什么。
例如,我称这个 URL 为:
http://localhost:8080/solr/Employees/select?q=lastName:anthan&fl=lastName&wt=json&indent=true&hl=true&hl.fl=lastName&hl.simple.pre=<em>&hl.simple.post=</em>
..."highlighting": {
"NB0094418": {
"lastName": [
"Yogan<em>anthan</em>" => OK
]
},
"NB0104046": {
"lastName": [
"Vijayakanthan" => KO, I want Vijayak<em>anthan</em>
]
},
"NB0144981": {
"lastName": [
"Parmananthan" => KO, I want Parman<em>anthan</em>
]
},...
<fieldType name="nameType" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="50" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" />
</analyzer>
</fieldType>
...
<fields>
<field name="lastName" type="nameType" indexed="true" stored="true" required="true" />
</fields>
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
</lst>
</requestHandler>
...
<searchComponent class="solr.HighlightComponent" name="highlight">
<highlighting>
<fragmenter name="gap" default="true" class="solr.highlight.GapFragmenter">
<lst name="defaults">
<int name="hl.fragsize">100</int>
</lst>
</fragmenter>
<fragmenter name="regex" class="solr.highlight.RegexFragmenter">
<lst name="defaults">
<int name="hl.fragsize">70</int>
<float name="hl.regex.slop">0.5</float>
<str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
</lst>
</fragmenter>
<formatter name="html" default="true" class="solr.highlight.HtmlFormatter">
<lst name="defaults">
<str name="hl.simple.pre"><![CDATA[<em>]]></str>
<str name="hl.simple.post"><![CDATA[</em>]]></str>
</lst>
</formatter>
<encoder name="html" default="true" class="solr.highlight.HtmlEncoder" />
<fragListBuilder name="simple" default="true" class="solr.highlight.SimpleFragListBuilder" />
<fragListBuilder name="single" class="solr.highlight.SingleFragListBuilder" />
<fragmentsBuilder name="default" default="true" class="solr.highlight.ScoreOrderFragmentsBuilder">
</fragmentsBuilder>
<fragmentsBuilder name="colored" class="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>
</highlighting>
</searchComponent>
最佳答案
直到昨天我都在处理一个非常相似的问题。我反复尝试了许多不同的解决方案,所以我最终得到的一些细节可能没有必要。但我会描述我最终的工作。简短的回答,我认为荧光笔无法在更长的字段上找到它需要的术语位置信息。
首先,我看到的症状:有时会出现搜索词高亮,有时整个字段会出现在高亮部分,但没有高亮信息。该模式最终基于字段的长度和搜索词的长度。我发现字段越长(实际上是 ngrammed 的标记),可以成功突出显示的搜索词越短。不过,这不是一对一。我发现对于包含 11 个或更少字符的字段,突出显示在所有情况下都可以正常工作。如果该字段有 12 个字符,则不会突出显示超过 9 个字符的 ngram。对于包含 15 个字符的字段,不会突出显示超过 7 个字符的 ngram。对于超过 18 个字符的字段,不会突出显示超过 6 个字符的 ngram。对于长度超过 21 个字符的字段,不会突出显示超过 5 个字符的 ngram,超过 24 个字符的字段不会突出显示超过 4 个字符。 (看起来,从上面的示例中,您看到的具体尺寸并不完全相同,但我确实注意到文档中突出显示不起作用的名称比突出显示的名称长。 )
所以,这就是最终的工作:
WhitespaceTokenizer
和 NGramFilterFactory
使用 NGramTokenizerFactory
反而。 (您已经在使用它,稍后我会遇到更多关于这给我带来的困难。)但是,这还不足以解决问题,因为术语位置仍然没有被存储。 FastVectorHighlighter
.这迫使我的模式字段的索引方式发生了一些变化(包括存储术语向量、位置和偏移量),而且我还必须从 hl.simple.pre
更改我的前指示符和后指示符标记配置|至 hl.tag.pre
(和 *post 类似)。 WhitespaceTokenizer
中得到的行为。 .如果我有一个包含短语“这是一个测试”的字段,我最终会得到包含“s is a”、“a tes”等的 ngrams,我真的只想要单个单词的 ngrams,而不是整个短语。
NGramTokenizer
里有一条说明您可以覆盖的 JavaDocs
NGramTokenizer.isTokenChar()
提供预标记化,但我在网上找不到这样的例子。我将在下面包括一个。
package info.jwismar.solr.plugin;
import java.io.Reader;
import org.apache.lucene.analysis.ngram.NGramTokenizer;
import org.apache.lucene.util.Version;
public class WhitespaceSplittingNGramTokenizer extends NGramTokenizer {
public WhitespaceSplittingNGramTokenizer(Version version, Reader input, int minGram, int maxGram) {
super(version, input, minGram, maxGram);
}
public WhitespaceSplittingNGramTokenizer(Version version, AttributeFactory factory, Reader input, int minGram,
int maxGram) {
super(version, factory, input, minGram, maxGram);
}
public WhitespaceSplittingNGramTokenizer(Version version, Reader input) {
super(version, input);
}
@Override
protected boolean isTokenChar(int chr) {
return !Character.isWhitespace(chr);
}
}
package info.jwismar.solr.plugin;
import java.io.Reader;
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.ngram.NGramTokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeSource.AttributeFactory;
public class WhitespaceSplittingNGramTokenizerFactory extends TokenizerFactory {
private final int maxGramSize;
private final int minGramSize;
/** Creates a new WhitespaceSplittingNGramTokenizer */
public WhitespaceSplittingNGramTokenizerFactory(Map<String, String> args) {
super(args);
minGramSize = getInt(args, "minGramSize", NGramTokenizer.DEFAULT_MIN_NGRAM_SIZE);
maxGramSize = getInt(args, "maxGramSize", NGramTokenizer.DEFAULT_MAX_NGRAM_SIZE);
if (!args.isEmpty()) {
throw new IllegalArgumentException("Unknown parameters: " + args);
}
}
@Override
public Tokenizer create(AttributeFactory factory, Reader reader) {
return new WhitespaceSplittingNGramTokenizer(luceneMatchVersion, factory, reader, minGramSize, maxGramSize);
}
}
solr-ngram-plugin.jar
并将其安装在
/opt/solr-ngram-plugin/
中。)
<lib path="/opt/solr-ngram-plugin/solr-ngram-plugin.jar" />
<fieldType name="any_token_ngram" class="solr.TextField">
<analyzer type="index">
<tokenizer class="info.jwismar.solr.plugin.WhitespaceSplittingNGramTokenizerFactory" maxGramSize="30" minGramSize="2"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="^(.{30})(.*)?" replacement="$1" replace="all" />
</analyzer>
</fieldType>
<fields>
<field name="property_address_full" type="string" indexed="false" stored="true" />
<field name="property_address_full_any_ngram" type="any_token_ngram" indexed="true"
stored="true" omitNorms="true" termVectors="true" termPositions="true"
termOffsets="true"/>
</fields>
<copyField source="property_address_full" dest="property_address_full_any_ngram" />
<!-- request handler to return typeahead suggestions -->
<requestHandler name="/suggest" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="rows">10</str>
<str name="mm">2</str>
<str name="fl">*,score</str>
<str name="qf">
property_address_full^100.0
property_address_full_any_ngram^10.0
</str>
<str name="sort">score desc</str>
<str name="hl">true</str>
<str name="hl.fl">property_address_full_any_ngram</str>
<str name="hl.tag.pre">|-></str>
<str name="hl.tag.post"><-|</str>
<str name="hl.fragsize">1000</str>
<str name="hl.mergeContinuous">true</str>
<str name="hl.useFastVectorHighlighter">true</str>
</lst>
</requestHandler>
关于solr : highlighting : hl. simple.pre/post 有时不会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23755097/
我有一个 NSButton带有图像(没有文本),在蓝色背景上。 样式为“Square”,类型为“Momentary Push In”,无边框等。 当我单击按钮时,它周围有一个光矩形,它会突出显示一秒钟
有没有办法用 highlight.js 强调线条? 例如,通过对它们进行不同的着色、更改背景颜色或其他方式。 最佳答案 您可以使用 HTML5 的 mark标签。 让我们以这段 Java 代码为例:
我试图用 highlight.js 做一个简单的例子,但我无法让它工作。我不熟悉highlight.js。这是我的代码,我不知道它有什么问题。任何的想法!提前致谢。 hljs.initHi
原标题是“特定于语言的配色方案防止较简单的配色方案为某些特定于语言的标签着色” 我正在使用 gVim 7.3(在 Ubuntu 12.04 Arch x86/64 上,这很重要)。 更新(2013-0
我将我认为有用的代码示例作为文本文件保存在我的计算机上。我将它们存储为 txt 文件而不是编写它们的语言,以便它们将在 Notepad++ 中打开而不是在编辑器中打开(即我不希望我的 c++ 示例在
所以我在网上搜索了这个问题的解决方案,但到目前为止还没有成功。我正在尝试根据 ASP.NET 中 GridView 中的“突出显示”行更新 SQL 数据库。这是我目前用于突出显示的代码。 //ASP.
如何配置 GitHub 的 Atom 以使其根据名称和/或扩展名自动为文件名设置特定的语法突出显示? 具体来说,我希望它自动将 Ruby 语法高亮设置为 Cocoapods 的 Podfile s。
真的需要一些建议。我正在尝试做几件事。1) 将表格 View 的第一个单元格设置为在第一次加载表格时突出显示。然后用户可以继续选择/突出显示表格中的其他单元格。如何第一次突出显示单元格? 2) 对一行
是否有一些现成的功能/宏可以帮助在不同颜色的源洞察中突出显示不同的单词(原始安装允许突出显示不同的单词,但都以相同的颜色)。 最佳答案 我正在寻找同样的东西。但是从sourceinsight官方引用来
在科莫多中,您的代码块用垂直虚线突出显示,如下图所示 . geany有类似的东西吗? 最佳答案 由于这里没有人回答我,我写信给 geany 邮件列表,他们也向我展示了如何在 geany 中获取它:它被
我正在寻找一个用 JavaScript 编写的全面的语法高亮器,它会自动检测所使用的语言并应用正确的语法高亮。 我从一个简单的谷歌搜索中找到了无数,但它们都必须在 上有某种格式化的类。元素如 .
我正在使用 Lucene 的 Highlighter 类来突出显示匹配搜索结果的片段,并且效果很好。我想从使用 StandardAnalyzer 搜索切换到 EnglishAnalyzer,它将执行词
无论文件类型如何,我都想突出显示某个单词。在我的 .vimrc 中,我添加了: highlight link notes todo syntax match notes contained "TODO
我将 jupyter notebook 与 python 一起使用 db.py 库进行数据库查询。 例如,它可能看起来像(在我的代码单元中): df = db.query(""" SELECT a,b
Closed. This question is off-topic。它当前不接受答案。 想要改善这个问题吗? Update the question,所以它是用于堆栈溢出的on-topic。 已关闭
我如何让它工作,我确实在 nano.rc 和 .nanorc 中添加了颜色语法突出显示配置,但没有任何 react 。 最佳答案 将名为 HOME 的环境变量设置到您的用户目录(cd ~ 将您置于例如
是否可以在 pre 标签中添加一个类来禁用代码高亮?我尝试添加类 prettyprint-false 和 no-prettyprint。 https://code.google.com/p/googl
我在 TextMate2 中工作,但这个问题也可能适用于其他文本编辑器。 我的脚本在 R 中。我打算在脚本上使用 rmarkdown::render() 来创建一个 "report" . 这些报告的聪
我需要在我的网站上发布SAS代码。但是,如果我确实编写HTML来突出显示SAS cod,那将花费我很长时间。 如何将SAS代码转换为外观漂亮的HTML副本? 最佳答案 我只是将您的编辑器中的内容复制/
我想在另一个扩展名上强制突出显示HTML语法(我的一位同事已决定为其模板文件使用其他文件命名方案)。 在其他编辑器中,可以手动选择,但Textmate似乎不适合我。如何使这些.randomtexten
我是一名优秀的程序员,十分优秀!