2013-02-25 4 views
2

현재 텍스트에서 다른 "키워드"를 확인하는 작업을하고 있습니다.elasticsearch로 텍스트 분류

"이것은 고기에 대한 부에노스 아이레스에서 쓰여진 텍스트의 예입니다"

는 예를 들어, 다음과 같은 입력 텍스트를 가정 할 수 있습니다.

또한 내 elasticsearch 예는 다음과 같은 문서를 저장 한 것으로 가정 할 수 있습니다 : [... 바르셀로나, 부에노스 아이레스, 로스 앤젤레스,]

을 :

도시

카테고리 : [금융, 정치, ..]

입력 텍스트에서 해당 도시와 카테고리를 식별 할 방법이 필요합니다.

나의 첫 번째 접근 방식은 "or"연산자로 검색 쿼리를 수행하고 어느 것이 가장 높은 순위인지 확인하는 것이 었습니다. 그 후에도 일치하는 문서를 텍스트와 함께 재실행하여 텍스트가 실제로 있는지 확인할 수 있습니다. 즉, "로스 앤젤레스"라는 단어가 텍스트에 있고 "로스"또는 " "앤젤레스).

내가 Elasticsearch 물건 이런 종류의 일을 그 경우 가장 좋은 방법은 방법을 궁금해하고있다.

기본적으로
+0

여기에 가장 적합한 대답을 수락 해주십시오. – javanna

답변

-2

Elastic searchApache Lucene의 상단을 기반으로, 따라서 당신은 당신이 원하는 쿼리하여 어떤 아파치를 사용할 수있다 :

query command + query syntax

경우 당신에게 나는이 "필드"쿼리를보고 추천 :

http://www.elasticsearch.org/guide/reference/query-dsl/field-query.html

+0

안녕하세요, 귀하의 답변 주셔서 감사합니다. 나는 ElasticSearch를 알고 있으며 몇 번 사용했습니다. 이전에 설명한 예제를 다루는 모범 사례를 찾고 있습니다. – Nicolas

0

최선을 "로스", "앤젤레스"와 같은 경우를 이전 인덱스 값으로 "키워드"를 확인하고 방지하기 위해하는 것은을 사용하는 것입니다 장기 분석은 분석되지 않은 필드를 쿼리합니다. 메모리 비용을주의 깊게 살펴보고 더 많은 예제를 보려면 here을보십시오. 건배

나는 다음과 같은 제안
+0

이미 별도의 필드에 범주가있는 경우에만 작동합니다. 도시 이름이 포함 된 큰 텍스트가있는 경우이를 분석해야합니다. 당신의 접근 방식이 그 질문에 맞지 않는 것 같아요. – javanna

5

: 조건 losangeles 존재와 같은 순서와 위치

  • 그래서하는 named filter의 각 쿼리를 포장에 있는지 확인하는

    • 사용을 match_phrase 쿼리를 일치하는 것을 식별 할 수 있습니다.

    예를 들어,이 문서를 작성 :

    curl -XPOST 'http://127.0.0.1:9200/test/test?pretty=1' -d ' 
    { 
        "text" : "This is an example of some text written from Buenos Aires about Meat" 
    } 
    ' 
    

    그런 다음 Buenos Aires 또는 Los Angeles을 찾고이 쿼리를 실행 :

    curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d ' 
    { 
        "query" : { 
         "constant_score" : { 
         "filter" : { 
          "or" : [ 
           { 
            "fquery" : { 
            "_name" : "buenos_aires", 
            "query" : { 
             "match_phrase" : { 
              "text" : "Buenos Aires" 
             } 
            } 
            } 
           }, 
           { 
            "fquery" : { 
            "_name" : "los_angeles", 
            "query" : { 
             "match_phrase" : { 
              "text" : "Los Angeles" 
             } 
            } 
            } 
           } 
          ] 
         } 
         } 
        } 
    } 
    ' 
    
    # { 
    # "hits" : { 
    #  "hits" : [ 
    #   { 
    #    "_source" : { 
    #    "text" : "This is an example of some text written from Buenos Aires about Meat" 
    #    }, 
    #    "_score" : 1, 
    #    "_index" : "test", 
    #    "_id" : "JIwnN_FVTv-0i5YGrlHLeg", 
    #    "_type" : "test", 
    #    "matched_filters" : [ 
    #    "buenos_aires" 
    #    ] 
    #   } 
    #  ], 
    #  "max_score" : 1, 
    #  "total" : 1 
    # }, 
    # "timed_out" : false, 
    # "_shards" : { 
    #  "failed" : 0, 
    #  "successful" : 5, 
    #  "total" : 5 
    # }, 
    # "took" : 58 
    # } 
    

    주 결과에 matched_filters 요소 필터가 일치하는 표시.

  • +0

    이것은 정확하게 내가 찾고 있었던 것 같습니다! 나는 그것을 가능한 빨리 시도 할 것이다! 정말 많이! – Nicolas

    2

    Percolator에 적합 할 수도 있습니다.

    쿼리를 별도의 인덱스에서 문서로 인덱싱 한 다음 문서를 여과하여 일치하는 쿼리를 알 수 있습니다. percolate API을 살펴보십시오.

    당신의 그것이 예를 들어 테스트 전화를하자합니다 ( create index API 사용) 인덱스를 만들어야합니다

    :

    curl -XPUT localhost:9200/test 
    

    그 다음에 이름을주는 우리의 "부에노스 아이레스"쿼리를 등록합니다. DrTech가 그의 답변에서 제안한 것처럼, 성냥 구문 검색은 좋은 선택 인 것 같습니다. ,

    curl -XGET localhost:9200/test/type1/_percolate -d '{ 
        "doc" : { 
         "city" : "This is an example of some text written from Buenos Aires about Meat" 
        } 
    }' 
    

    당신이 경우에 다음과 같은 JSON을 다시 받아야 :

    curl -XPUT localhost:9200/_percolator/test/buenosaires -d '{ 
        "query" : { 
         "match_phrase" : { 
          "text" : "Buenos Aires" 
         } 
        } 
    }' 
    

    그런 다음 우리가 문서를 보낼 것을 의미에서 서서히 우리는 우리가 이전에 인덱스 쿼리 중 일치하는 쿼리 돌아가 부에노스 아이레스는 색인 동안 우리가 쿼리에 준 이름입니다 :

    {"ok":true, "matches":["buenosaires"]} 
    

    DrTech의 대답은 정말 좋은 것입니다. 주요 차이점은 텍스트가 실제로 어디에 있는지에 따라 달라집니다. 그것이 elasticsearch에서 이미 색인 된 경우 가장 좋은 전략은 단일 요청에서 문서가 일치하는 쿼리를 가져 오기 위해 명명 된 쿼리를 만드는 것입니다.

    반면 색인을 작성하려는 경우 실제로 색인을 생성하기 전에 문서를 풍부하게해야하는 경우에는 여과기가 더 적합 할 것입니다.

    희망이 도움이됩니다.