2013-02-12 3 views
1

Я пытаюсь использовать функцию перколяции в elasticsearch. Он отлично работает, но из коробки нет никаких средств для обработки сингулярных/множественных чисел и т. Д. Документация довольно тонкая в этой теме, поэтому мне было интересно, если кто-то получил эту работу и какие настройки требуются. На данный момент я не индексирую свои документы, так как я их не ищу, просто передавая их через перколятор для запуска уведомлений.elasticsearch percolator stemmer

ответ

5

Вы можете использовать percolate API для проверки документов против перколяторов без их индексации. Однако API percolate требует и index и type для вашего документа. Это значит, что он знает, как определяется каждое поле в вашем документе (или отображается).

Анализаторы относятся к индексу, а поля в определении отображения/типа могут использовать либо глобально определенные анализаторы, либо пользовательские анализаторы, определенные для вашего индекса.

Например, мы могли бы определить отображение для индекса test типа test с использованием глобально определенный анализатора следующим образом:

curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1' -d ' 
{ 
    "mappings" : { 
     "test" : { 
     "properties" : { 
      "title" : { 
       "type" : "string", 
       "analyzer" : "english" 
      } 
     } 
     } 
    } 
} 
' 

Или же, вы можете настроить пользовательский анализатор, который принадлежит только к индексу test:

curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1' -d ' 
{ 
    "mappings" : { 
     "test" : { 
     "properties" : { 
      "title" : { 
       "type" : "string", 
       "analyzer" : "my_english" 
      } 
     } 
     } 
    }, 
    "settings" : { 
     "analysis" : { 
     "analyzer" : { 
      "my_english" : { 
       "stopwords" : [], 
       "type" : "english" 
      } 
     } 
     } 
    } 
} 
' 

Теперь мы можем создать кофейник, задающий, какой индекс принадлежит:

curl -XPUT 'http://127.0.0.1:9200/_percolator/test/english?pretty=1' -d ' 
{ 
    "query" : { 
     "match" : { 
     "title" : "singular" 
     } 
    } 
} 
' 

И проверить его с percolate API, снова указав индекс и тип:

curl -XGET 'http://127.0.0.1:9200/test/test/_percolate?pretty=1' -d ' 
{ 
    "doc" : { 
     "title" : "singulars" 
    } 
} 
' 
# { 
# "ok" : true, 
# "matches" : [ 
#  "english" 
# ] 
# } 
+0

Великий ответ. Обратите внимание, что для более новых версий ES используйте: PUT /test/.percolator/english?pretty=1 ... – yahermann