有人可以判断我是对还是错,检查标题字段是否包含项目
curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
"query": {
"query_string": {
"query": "title:Item"
}
}
}'
修改
我有一个像“经济学和统计学”这样的标题
这个会返回一条记录
curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
"query": {
"query_string": {
"query": "title:*statistics*"
}
}
}'
这个不会返回任何内容
curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
"query": {
"query_string": {
"query": "title:statistics"
}
}
}'
这个也不会返回任何内容(奇怪)
curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
"query": {
"query_string": {
"query": "title:*Economics*"
}
}
}'
医生说:
状态字段 包含 有效
status:active
答案 0 :(得分:1)
you can mention a particular field in default_field
{
"query_string" : {
"default_field" : "content",
"query" : "this AND that OR thus"
}
}
if you want to specify more than one field then
{
"query_string" : {
"fields" : ["content", "name"],
"query" : "this AND that"
}
}
答案 1 :(得分:0)
对于像我这样面对ES问题的初学者:要非常小心如何映射/标记数据。 “not_analyzed”并不意味着我认为它意味着什么,并引导我解决上述问题。
答案 2 :(得分:-1)
您的查询看起来不错。但你也可以通过以下查询来实现相同的目标。
curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
"query": {
"term": {
"title": {
"value": "Item"
}
}
}
}'
在研究elasticsearch查询优化的过程中,我发现建议在必要时避免使用query_string
。默认情况下,query_string
也不会被缓存。
答案 3 :(得分:-1)
curl -XGET "http://localhost:9200/myapp/item/_search" -d'
{
"query": {
"match": {
"title": "statistics"
}
}
}'
如果您想搜索确切的术语(不是该字段的确切内容),这就足够了。尽量避免使用通配符,因为它很昂贵。要在字段中搜索一小部分单词,您必须根据需要修改映射。
检查您的地图并查看标题字段的类型。如果未进行分析,请将其重新编入索引已分析(默认情况下)。