我在SO中看到了很多问题,还阅读了有关“未缓存查询时缓存了过滤器”的文档,以及“对所有值应用查询”和“如果查询对象之外在查询后应用了过滤器”等信息, 。
底线是文档很烂,DSL很难掌握。我正在尝试优化一些查询并使用kibana dev工具搜索分析器,但是我的本地数据集必须太小,无法测量实际的性能差异(我正在双向获得结果),并且没有测试具有多个节点的集群,以处理真实的大型数据集。
在这种情况下,所有查询将返回相同的结果。我想了解两者之间的区别,以及在任何允许将子句放置在过滤器中的情况下,为什么您更喜欢查询而不是过滤器
GET foo11/_search
{
"query": {
"bool": {
"filter": {
"match" : {
"in_stock" : true
}
}
}
}
}
GET foo11/_search
{
"query": {
"bool": {
"filter": {
"term" : {
"in_stock" : true
}
}
}
}
}
GET foo11/_search
{
"query": {
"bool": {
"must": {
"match" : {
"in_stock" : true
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这3种情况在表现上有什么区别?我真的可以证明一个比另一个更好/更差吗?
之间有什么区别?
"match" : {
"in_stock" : true
}
Run Code Online (Sandbox Code Playgroud)
与
"term" : {
"in_stock" : …Run Code Online (Sandbox Code Playgroud) 我正在使用elasticsearch dsl搜索elasticsearch:https : //elasticsearch-dsl.readthedocs.org/en/latest/
如何为查询启用track_scores?
我知道它在Elasticsearch中受支持:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_track_scores
只是不知道如何在Elasticsearch-dsl中做同样的事情
我正在尝试使用 field_value_factor 来衡量文档中的某些字段来制定弹性搜索查询。
{
"query": {
"match": {
"local": true
},
"function_score": {
"functions": [
{
"field_value_factor": {
"field": "title",
"factor": 1.2,
"missing": 1
}
},
{
"gauss": {
"location": {
"origin": {
"lat": 51.5,
"lon": 0.12
},
"offset": "2 Miles",
"scale": "3 Miles"
}
}
},
{
"gauss": {
"creation_time": {
"decay": 0.8,
"offset": "2d",
"scale": "48d"
}
},
"weight": 2
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何输入,如:
"field_value_factor": {
"field": [“title”,"description"],
"factor": [1.2,0.8],
"missing": [1,0]
}
Run Code Online (Sandbox Code Playgroud)
不适用于这两个字段,并且查询检索与第一个相同的文档。
是否可以在“field_value_vector”中输入多个术语?
I'm having trouble trying to use the Ingest Attachment Processor Plugin with ElasticSearch (5.5 on AWS, 5.6 local). I'm developing in Python (3.6) and am using the elasticsearch-dls library.
I'm using Persistence and have my class set-up like this:
import base64
from elasticsearch_dsl.field import Attachment, Text
from elasticsearch_dsl import DocType, analyzer
lower_keyword = analyzer('keyword', tokenizer="keyword", filter=["lowercase"])
class ExampleIndex(DocType):
class Meta:
index = 'example'
doc_type = 'Example'
id = Text()
name = Text(analyzer=lower_keyword)
my_file = Attachment()
Run Code Online (Sandbox Code Playgroud)
I then have a …
python python-3.x elasticsearch elasticsearch-plugin elasticsearch-dsl
我有一个 elasticsearch 范围查询,我想将其转换为elasticsearch-dsl:
{"range":
{"@timestamp":
{"gte": 1570258800000,
"lte": 1571036400000,
"format": "epoch_millis"
}
}
}
Run Code Online (Sandbox Code Playgroud)
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
client = Elasticsearch(<connection_details>)
s = Search(using=client, index="my-index") \
.query("???")
Run Code Online (Sandbox Code Playgroud) 我有一个 Elasticsearch 数据库,其中包含多个字段,其中可以包含名称信息,并尝试像这样搜索它:
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
client = Elasticsearch()
s = Search(using=client, index="names")
query = 'smith'
fields = ['name1', 'name2']
results = s.query("multi_match", query=query, fields=fields, fuzziness='AUTO')
for hit in results.scan():
print(hit.meta.score)
Run Code Online (Sandbox Code Playgroud)
结果是:
None
None
None
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我手动构建它:
results = client.search(index="names",
body={"size": 100, "query":{
"multi_match": {
"query": query, "fields": fields, "fuzziness": 'AUTO'
}
}
})
Run Code Online (Sandbox Code Playgroud)
我的结果是:
{'_index': 'names', '_type': 'Name1', '_id': '1MtYSW4BXryTHXwQ1xBS', '_score': 14.226202, '_source': {...}
{'_index': 'names', '_type': 'Name1', '_id': 'N8tZSW4BXryTHXwQHBfw', '_score': 14.226202, '_source': {...} …Run Code Online (Sandbox Code Playgroud)