0

edgengramクエリを正しく動作させるのに問題があります。エッジグラムが2以上のレコード「bluegrass」が1つあります。ただし、「blv」のクエリ文字列は「bluegrass」を返しますが、そうではありません。

curl -X POST http://localhost:9200/test -d '{ 
    "mappings": { 
        "product/fragrance": { 
            "properties": { 
                "name_query": { 
                    "index_analyzer": "query_index_analyzer", 
                    "search_anaylzer": "query_search_analyzer", 
                    "as": {}, 
                    "type": "string" 
                } 
            } 
        } 
    }, 
    "settings": { 
        "analysis": { 
            "filter": { 
                "query_edgengram": { 
                    "type": "edgeNGram", 
                    "min_gram": 2, 
                    "max_gram": 20, 
                    "side": "front" 
                } 
            }, 
            "analyzer": { 
                "query_index_analyzer": { 
                    "tokenizer": "lowercase", 
                    "filter": ["asciifolding", "query_edgengram"] 
                }, 
                "query_search_analyzer": { 
                    "tokenizer": "lowercase", 
                    "filter": ["asciifolding"] 
                } 
            } 
        } 
    } 
}' 

curl -X POST "http://localhost:9200/test/product%2Ffragrance/1" -d '{ 
    "name_query": "blue grass" 
}' 

curl -X GET "http://localhost:9200/test/product%2Ffragrance/_search?load=true&pretty=true" -d '{ 
    "query": { 
        "bool": { 
            "must": [{ 
                "query_string": { 
                    "query": "blv", 
                    "fields": ["name_query"], 
                    "default_operator": "OR" 
                } 
            }] 
        } 
    } 
}' 

どういうわけか、私はそれから結果を得ます。誰かが理由を説明できますか?ありがとう。私がしたいのは、「blv」が「青い草」を返すべきではないのに、「blv」が戻るべきではないということです。分析APIを使用して、「青い草」が「bl」、「blu」、「blue」、「gr」、「gra」、「gras」、「grass」に分解されているのを確認しましたが、「blv」はそうではありません。それらのいずれかに一致します。

4

2 に答える 2

2

Davidが彼の回答であなたに言ったように、いくつかのelasticsearchクエリが分析されます。通常、クエリにngramを適用することは望ましくありませんが、マッピングを考えると、それをすでに知っているようです。実際、ngramのない検索アナライザーが考慮されない理由は、タイプミスです。search_anaylzerではなくsearch_analyzer。そのため、クエリはとになりbl、返されたドキュメントと一致しますblvbl

于 2012-10-16T11:00:27.623 に答える
1

MatchQueryまたはQueryStringを使用して何かを検索すると、同じアナライザーが適用されます。したがって、blvはblにトークン化され、blvとblはblと一致します。

分析されていないTermQueryを使用できます。

私はあなたの質問を持っていないので、これ以上言うのは難しいです。

デビッド

于 2012-10-16T09:31:09.830 に答える