【问题标题】:Optimizing percolator queries in Elasticsearch优化 Elasticsearch 中的过滤器查询
【发布时间】:2018-05-14 04:03:17
【问题描述】:

我正在处理 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 词条的过滤器查询是完全匹配的,这意味着,如果我搜索带有部分词条的新查询,搜索引擎将在索引中找不到任何匹配项。

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

谁能帮帮我?

谢谢,

【问题讨论】:

标签: elasticsearch


【解决方案1】:

看来是语言问题。

为了解决这个问题,我们将使用自定义分析器:我们将确保所有术语都小写,我们将使用 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",
         }
      }
   }
}

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

现在我们可以使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多