我有一个简单的文档,其中包含一个名为“关键字”的字段,该字段被索引用于文本搜索。关键字是单词和短短语的数组,如下所示:
{“关键字”:[“餐厅经理”,“厨师”,“公共汽车男孩”]}
查询必须包含文档关键字中至少一项的所有单词,以便返回该文档。
例子:
“经理”不应返回此文档。
“ bus”和“ manager”不应返回此文档。
“餐厅经理”应返回此文档。
“ chef”应html" target="_blank">返回此文档。
“餐厅经理厨师”应返回此文档,并获得更高的分数。
“餐厅经理无关字词”应返回此文档。
“餐厅经理巴士”应返回此文档,但理想情况下,其得分不应高于“餐厅经理”。
评分很重要,因此我需要使其成为查询而不是过滤器。
我正在使用Elasticsearch 1.7。
这可以通过以下设置来实现。
POST your_index
{
"settings": {
"analysis": {
"analyzer": {
"keyword_analyzer": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "keyword"
},
"shingle_analyzer":{
"type" : "custom",
"filter" :["lowercase","shingle_filter"],
"tokenizer" : "standard"
}
},
"filter": {
"shingle_filter": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 5
}
}
}
},
"mappings": {
"your_type": {
"properties": {
"keywords": {
"type": "string",
"index_analyzer": "keyword_analyzer",
"search_analyzer": "shingle_analyzer"
}
}
}
}
}
在这里,由于需求analyzers
,我使用了两种不同的方法,一种用于indexing
和一种用于searching
。keyword_analyzer
需要按原样索引该词,以便对
经理的 查询不会与 饭店经理
一起返回文档。有关关键字分析器的更多信息。现在,搜索需要带状滤波器以phrases
从输入文本生成。像 This restaurant manager那样的
文本将被分成 This restaurant , restaurant manager , manager is
等等,您将获得期望的结果。您可以使用分析API来查看分析器的工作方式。
您可以像这样索引文档
PUT your_index/your_type/1
{
"keywords": ["restaurant manager", "chef", "bus boy"]
}
这种类型的查询将为您提供文件
GET your_index/_search
{
"query": {
"match": {
"keywords": "This restaurant manager is also a good chef"
}
}
}
希望这可以帮助!
我是Elasticsearch的新手,我面临一个问题。我的任务是搜索一组文档。例如,我有这样结构的数据: 但是困难的是,我如何获取所有带有project_id=abc的文档,然后通过与关键字“测试”匹配的任何其他字段(代码、名称、状态)搜索它们(例如)。我如何在Elasticsearch查询中做到这一点,请帮助我! 谢谢
问题内容: 我们可以像这样在特定document.field中搜索所有单词: 这将搜索词,并在该领域,从而只返回这些文档将在所有这些词场。 但是我想做的却有些不同。 我想进行查找,以便如果该文档字段的所有单词都出现在我的搜索查询中,则它将返回该文档。 例如 假设Elasticsearch数据库中有一个文档 现在,如果我搜索“ a”,它将返回该文档,因为document.title中的所有单词确实存
问题内容: 我有一个运行中的elasticsearch的内存实例,并做了一些探索性的编码来学习搜索Java API。我能够将文档提交到索引并使用GET检索它们,但是当我尝试简单的搜索查询时,没有得到任何结果。 经过一些测试后,我认为问题出在我如何设置节点和关联的客户端(在内存中): 问题答案: Googleelasticsearch小组中的某个人很友好,可以在这里帮助我。将文档提交到内存节点后,我
问题内容: 通过以下查询,我得到的结果包含单词“ International”和“ Shipping”,我还得到了包含“ International”或“ Shipping”的结果。我该怎么做才能确保结果同时包含两个单词而不只是其中之一? 任何帮助将不胜感激,谢谢! 问题答案: 在每个必需的单词前添加一个,然后使用。 11.8.2。 布尔全文搜索 在实现此功能时,MySQL使用了有时称为隐式布尔逻
问题内容: 如何在Elasticsearch中按数组索引查询/过滤? 我有一个像这样的文件: 我想搜索 LIN [0] 是否为“ UP”并且 LIN [1]是否 存在。 谢谢。 问题答案: 这看起来可能像hack,但是可以肯定地起作用。首先,我们将令牌计数类型与多字段一起应用以捕获令牌数量作为字段。因此,映射将如下所示- 链接-http: //www.elasticsearch.org/guide
问题内容: 我有以下Elasticsearch查询。 假设我想从此搜索查询中排除。该文档指出以下内容: 它还支持通配符,例如:test ,以及“添加”(+)和“删除”(-)的功能,例如:+ test ,-test3。 据我了解,我应该能够执行以下操作。 但是,出现以下错误。 如果删除加号和减号,则查询运行正常。如果添加通配符,它似乎可以工作,例如以下查询。 但是,这并不是我真正想要的。 当我使