在Elasticsearch中优化过滤器查询 [英] Optimizing percolator queries in Elasticsearch

查看:57
本文介绍了在Elasticsearch中优化过滤器查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理170900个文档的索引: https://pasteboard.co/HfGrfiT.png

I'm working in a index of 170900 documents: https://pasteboard.co/HfGrfiT.png

这是它的设置: https://pasteboard.co/HfGxDAi.png

我检查了索引以确保我的查询正确: https://pasteboard.co/HfGrBFC.png

I reviewed the index for ensure my query is correct: https://pasteboard.co/HfGrBFC.png

我正在使用下一个查询对具有此索引的文本进行渗透:

I'm using the next query for percolate a text with this index:

curl -XGET 'localhost:9200/title-index/_search?pretty' -H 'Content-Type: application/json' -d'                                                                    ✔  1543  19:00:04 
{
    "query" : {
        "percolate" : {
            "field" : "query",
            "document" : {
                "title" : "Dışa, bireylerin bir arada bulunması, iletişime geçmesi, kendi sosyal mekânlarını oluşturmasıyla kamusal özellik kazanan kentsel açık mekânlar küreselleşme ve yeni yaşam biçimlerinin ortaya çıkmasıyla birlikte zedelenmeye ve önemini kaybetmeye başlamıştır. Özellikle 1990lı yıllardan itibaren inşa edilen kapalı konut sitelerinin çevresinde kalan bu alanlarda insan-çevre ilişkisi göz ardı edilmiş ve kentten kopuk, atıl durumda kalan sorunlu alanlar ortaya çıkmıştır. Çalışmanın amacı kapalı konut sitelerinin dışında kalan kamusal açık mekânların insan ve çevre ilişkisi açısından barındırdığı sorunlara dikkat çekmek, teorik bulguları İzmir kenti Mavişehir örnekleminde gerçekleştirilen ve sistematik gözlem çalışmasına dayanan bir alan çalışması ile test etmektir. Araştırma sonucunda kapalı konut sitelerinin bulunduğu yerlerde kamusal açık alanların sürdürülebilirliğinin tehdit altında olduğu, söz konusu problemin kapalı sitelerin yarattığı fiziksel ve sosyal ayrışmadan kaynaklandığı belirlenmiştir. Bunların sonucu olarak kamusal açık alanlarda etkileşime olanak vermeyen mekânlar ortaya çıkmakta, kullanım yoksunluğuna bağlı olarak güvensiz mekânlar oluşmaktadır. İzmir Mavişehirde gerçekleştirilen alan çalışmasında farklı dönemde inşa edilen ve farklı tasarım niteliklerine sahip iki site karşılaştırmalı olarak incelendiğinde teorik bulgular sistematik gözlem verileriyle de desteklenmiştir. Mavişehirde site sınırlarının olmadığı ve yaya erişiminin engellenmediği 1. etap konut yerleşiminin bulunduğu alanda yer alan park ve rekreasyon alanları-nın, Albayrak kapalı konut sitesinin bulunduğu alandaki kamusal açık alanlara göre gece ve gündüz çok daha etkin kullanıldığı, tasarım ve peyzaj elemanlarının daha nitelikli olduğu tespit edilmiştir. Albayrak konut sitesi yakın çevresindeki açık kamusal alanların tasarım ve peyzaj donatısının çok yetersiz olduğu, etkin biçimde kullanılmadığı, atıl, güvensiz ve suça meyil oluşturan ortamlar hazırladığı gözlenmiştir. Araştırma sonuçları kapalı konut sitelerinin insan ve çevre ilişkilerini zedelediğini, kamusal açık mekânların ve kamusal yaşamın sürdürülebilirliği açısından önemli açmazlar barındırdığını ortaya çıkarmıştır."
            }
        }
    },

    "highlight": {
      "fields": {
        "title": {}
      }
    }
}
'

但是我没有任何结果:

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

要检索所有索引需要一些文档,我不知道该如何更改.

It is taking a few documents instead to search in all index, i don't know how can i change this.

更新:

使用新索引测试此问题,我发现了两个问题:

Testing this problem with a new index i found two issues:

    带有 span_near 词的
  1. 过滤器查询是完全匹配的,这意味着,如果我搜索带有部分词的新查询,搜索引擎将在索引中找不到任何匹配项.

为了获得全面的搜索支持,我该如何解决这个问题?

In order to get a full search support, how can i solve this problem?

有人可以帮助我吗?

谢谢

推荐答案

似乎是语言问题.

为解决此问题,我们将使用自定义分析器:我们将确保所有术语均使用小写,并将使用 turkish 语言(在这种情况下,所有文档的通用语言均为土耳其语).

For solve this we will use a custom analyzer: we will sure lower case in all terms and we will do it in turkish language (in this case all documents' common language is turkish).

首先,我们将创建一个自定义过滤器: turkish = analysis.token_filter('turkish_lowercase',type ="lowercase",language ="turkish")

First, we will create a custom filter: turkish = analysis.token_filter('turkish_lowercase', type="lowercase", language="turkish")

第二,我们将创建一个使用新过滤器的自定义分析器:

Second, we will create a custom analyzer that use the new filter:

turkish_lowercase = analyzer('turkish_lowercase',
    type = "custom",
    tokenizer="standard",
    filter=[turkish],
)

第三,我们将此分析器应用于适当的字段:

Third, we will apply this analyzer to the proper field:

class Document(DocType):
    title = Text(
        analyzer=turkish_lowercase,
        # filter=turkish
        )
    query = Percolator(
    )    # query is a percolator

    class Meta:
        index = 'titles' # index name
        doc_type = '_doc'

    def save(self, **kwargs):
        return super(Document, self).save(**kwargs)

我们将获得像这样的索引:

We will obtain a index like this:

{
   "titles":{
      "aliases":{

      },
      "mappings":{
         "_doc":{
            "properties":{
               "query":{
                  "type":"percolator"
               },
               "title":{
                  "type":"text",
                  "analyzer":"turkish_lowercase"
               }
            }
         }
      },
      "settings":{
         "index":{
            "number_of_shards":"5",
            "provided_name":"titles",
            "analysis":{
               "filter":{
                  "turkish_lowercase":{
                     "type":"lowercase",
                     "language":"turkish"
                  }
               },
               "analyzer":{
                  "turkish_lowercase":{
                     "filter":[
                        "turkish_lowercase"
                     ],
                     "type":"custom",
                     "tokenizer":"standard"
                  }
               }
            },
            "number_of_replicas":"1",
         }
      }
   }
}

现在,我们将重建索引.

Now, we going to re-built the index.

现在我们可以使用渗滤器获得结果:

Now we can get results using percolator:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
from elasticsearch_dsl.query import Query

class Percolate(Query):
    name = 'percolate'

client = Elasticsearch()

index = 'titles'
text = "Bireylerin bir arada bulunması, iletişime geçmesi, kendi sosyal mekânlarını oluşturmasıyla kamusal özellik kazanan kentsel açık mekânlar küreselleşme ve yeni yaşam biçimlerinin ortaya çıkmasıyla birlikte zedelenmeye ve önemini kaybetmeye başlamıştır. Özellikle 1990’lı yıllardan itibaren inşa edilen kapalı konut sitelerinin çevresinde kalan bu alanlarda insan-çevre ilişkisi göz ardı edilmiş ve kentten kopuk, atıl durumda kalan sorunlu alanlar ortaya çıkmıştır. Çalışmanın amacı kapalı konut sitelerinin dışında kalan kamusal açık mekânların insan ve çevre ilişkisi açısından barındırdığı sorunlara dikkat çekmek, teorik bulguları İzmir kenti Mavişehir örnekleminde gerçekleştirilen ve sistematik gözlem çalışmasına dayanan bir alan çalışması ile test etmektir. Araştırma sonucunda kapalı konut sitelerinin bulunduğu yerlerde kamusal açık alanların sürdürülebilirliğinin tehdit altında olduğu, söz konusu problemin kapalı sitelerin yarattığı fiziksel ve sosyal ayrışmadan kaynaklandığı belirlenmiştir. Bunların sonucu olarak kamusal açık alanlarda etkileşime olanak vermeyen mekânlar ortaya çıkmakta, kullanım yoksunluğuna bağlı olarak güvensiz mekânlar oluşmaktadır. İzmir Mavişehir’de gerçekleştirilen alan çalışmasında farklı dönemde inşa edilen ve farklı tasarım niteliklerine sahip iki site karşılaştırmalı olarak incelendiğinde teorik bulgular sistematik gözlem verileriyle de desteklenmiştir. Mavişehir’de site sınırlarının olmadığı ve yaya erişiminin engellenmediği 1. etap konut yerleşiminin bulunduğu alanda yer alan park ve rekreasyon alanlarının, Albayrak kapalı konut sitesinin bulunduğu alandaki kamusal açık alanlara göre gece ve gündüz çok daha etkin kullanıldığı, tasarım ve peyzaj elemanlarının daha nitelikli olduğu tespit edilmiştir. Albayrak konut sitesi yakın çevresindeki açık kamusal alanların tasarım ve peyzaj donatısının çok yetersiz olduğu, etkin biçimde kullanılmadığı, atıl, güvensiz ve suça meyil oluşturan ortamlar hazırladığı gözlenmiştir. Araştırma sonuçları kapalı konut sitelerinin insan ve andçevre ilişkilerini zedelediğini, kamusal açık mekânların ve kamusal yaşamın sürdürülebilirliği açısından önemli açmazlar barındırdığını ortaya çıkarmıştır. Anahtar sözcükler: İnsan-çevre ilişkisi; kamusal açık alanlar; kapalı konut siteleri."

s = Search().using(client).index(index).query("percolate", field='query', document={'title': text}).highlight('title')

s = s.highlight_options(pre_tags='<a href=\"\">', post_tags='</a>')

print(s.to_dict())

response = s.execute()

for hit in response:
    for fragment in hit.meta.highlight.title:
        print(fragment)

这篇关于在Elasticsearch中优化过滤器查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆