在Elasticsearch中优化过滤器查询

时间:2018-04-08 16:03:05

标签: elasticsearch

我在170900份文档的索引中工作: https://pasteboard.co/HfGrfiT.png

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

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

我使用下一个查询来覆盖带有此索引的文本:

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" : [ ]
  }
}

它需要一些文件来搜索所有索引,我不知道如何更改它。

更新

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

  1. span_near字词的过滤器查询已完全匹配,这意味着,如果我使用部分字词搜索新查询,搜索引擎将无法在索引中找到任何匹配项。
  2. 为了获得完整的搜索支持,我该如何解决这个问题?

    任何人都可以帮助我吗?

    谢谢,

1 个答案:

答案 0 :(得分:0)

这似乎是一种语言问题。

为了解决这个问题,我们将使用自定义分析器:我们将确保所有术语的小写,我们将使用turkish语言(在这种情况下,所有文档'共同语言都是土耳其语)。

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

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

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

第三,我们将此分析仪应用于适当的领域:

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)

我们将获得这样的索引:

{
   "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",
         }
      }
   }
}

现在,我们将重新构建索引。

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

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)