- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是创建一个查询,该查询将对文档的字段A,B和C使用常规的query_string
查询来找到“最佳”的20个文档,并尝试对字段D进行完全匹配或完全匹配。例如:如果字段D为“AAA.BBB.CCC.DDD”,则查询“AAA.BBB”应匹配(以及“BBB.CCC”和“AAA.BBB.CCC”等)。哦,是的,我也想获得突出显示的结果。
迄今为止,我最接近的尝试是在字段D上使用ngram标记器/分析器,并且仅允许A,B,C正常索引。
{
"settings": {
"number_of_shards": 5,
"index": {
"analysis": {
"tokenizer": {
"customNgram": {
"type": "nGram",
"min_gram": "3",
"max_gram": "5"
}
},
"analyzer": {
"lllNgram": {
"type": "custom",
"filter": "lowercase",
"tokenizer": "customNgram"
}
}
}
}
},
"mappings": {
"lessons": {
"_id": {
"path": "id"
},
"properties": {
"id": {
"type": "integer"
},
"A": {
"type": "string",
"store": "yes"
},
"B": {
"type": "string",
"store": "yes"
},
"C": {
"type": "string",
"store": "yes"
},
"D": {
"type": "string",
"store": "yes",
"analyzer": "lllNgram"
}
}
}
}
}
{
"size":20,
"query":{
"filtered":{
"query":{
"match_all":{}
},
"filter":{
"or":[
{
"query":{
"query_string":{
"query":"XYZZY TOP",
"fields":["A","B","C"]
}
}
},
{
"query":{
"match":{
"D": {
"query":"XYZZY TOP",
"operator" : "and"
}
}
}
}
]
}
}
},
"highlight":{
"pre_tags":["<em>"],
"post_tags":["<\/em>"],
"fields":{
"A":{},
"B":{},
"C":{},
"D":{}
}
}
}
最佳答案
映射/查询中有几个问题:
ngram(3, 5)
,因此生成的术语的最大长度仅为5,然后查询AAA.BBB
(长度= 7)。它可以在您的映射中匹配,但是它是无效的,并且在这种情况下是错误的设计(将其用于索引和搜索是错误的),您可以将其扩展为ngram(3, 20)
并将其仅用于索引时间。 index_analyzer = lllNgram
,然后使用不修改search_analyzer数据的分析器,例如,在我的示例中为search_analyzer = keyword_lowercase_analyzer
。为数据建立索引时使用index_analyzer
,因此我们需要定义规则以生成所有可能匹配的术语(在本例中为ngram),在与索引数据进行比较之前解析查询时使用search_analyzer
,因此我们只需要定义规则以将其保留为在这种情况下是原始的(只是小写)the "best" 20 documents
结果。 {
"settings": {
"number_of_shards": 5,
"index": {
"analysis": {
"tokenizer": {
"customNgram": {
"type": "nGram",
"min_gram": "3",
"max_gram": "20"
}
},
"analyzer": {
"lllNgram": {
"type": "custom",
"filter": "lowercase",
"tokenizer": "customNgram"
},
"keyword_lowercase_analyzer": {
"tokenizer": "keyword",
"filter": ["lowercase"]
}
}
}
}
},
"mappings": {
"lessons": {
"_id": {
"path": "id"
},
"properties": {
"id": {
"type": "integer"
},
"A": {
"type": "string",
"store": "yes"
},
"B": {
"type": "string",
"store": "yes"
},
"C": {
"type": "string",
"store": "yes"
},
"D": {
"type": "string",
"store": "yes",
"index" : "analyzed",
"index_analyzer" : "lllNgram",
"search_analyzer" : "keyword_lowercase_analyzer",
"term_vector" : "with_positions_offsets"
}
}
}
}
}
{
"size": 20,
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "AAA.BBB",
"fields": [
"A",
"B",
"C"
]
}
},
{
"match": {
"D": {
"query": "AAA.BBB",
"operator": "or"
}
}
}
]
}
},
"highlight": {
"pre_tags": [
"<em>"
],
"post_tags": [
"</em>"
],
"fields": {
"A": {},
"B": {},
"C": {},
"D": {}
}
}
}
with_positions_offsets
来更快地突出显示术语。可以在这里引用更多信息:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html inquisitor
插件来测试分析仪,它将帮助您找出类似的问题。 关于elasticsearch - 对ElasticSearch中的不同字段使用不同的查询来匹配和突出显示文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696997/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!