0

問題は次のとおりです。例「JOHNLENARDSMITH」などの名前で構成される列(customernameという名前)があります。

したがって、名が「JOHN」で姓が「SMITH」のすべての名前を取得するクエリを作成したいと思います。2番目の名前は関係ないので、*ワイルドカード文字を入れます。

また、もっと大きな問題があります。ユーザーが「JOHN LENARD SMITH」と書いた場合、この正確な人物を見つけることができるはずです。

私が試したこと:

1.フィールドtext_wsタイプを作成し、次のクエリをテストしました。問題は次のとおりです。例「ИванКириловПетров」、「НинаСемоваМариножа」などの名前で構成される列(名前)があります。

だから私は、名が「Иван」で、姓が「Петров」であるすべての名前を取得するクエリを作成したいと思います。2番目の名前は関係ないので、*ワイルドカード文字を入れます。

また、より大きな問題があります。ユーザーが「ИванКириловПетров」と書いた場合、この正確な人物を見つけることができるはずです。

私が試したこと:

フィールドtext_wsタイプを作成し、次のクエリをテストしました。

q=cust_name:JOHN*SMITH


q=cust_name:/JOHN.*SMITH/

何も機能しません!私は必死です私はこのタスクを解決することは決してないと思います。

4

2 に答える 2

0

このフィールドを使用しているtext_wsため、Solrがクエリをインデックス値に一致する用語に分割できるように、クエリに空白を含める必要があります。JOHN SMITHの例では、次のように機能するはずです。

 q=cust_name:JOHN * SMITH

名前のどこかにJOHNまたはSMITHの出現を探している場合は、次を使用することもできます。しかし、例に基づくと、位置はあなたにとって重要であるように思われます。

 q=cust_name:JOHN SMITH

また、クエリで空白を保持することを使用すると、JOHNLENARDSMITHの検索も機能するようになります。

 q=cust_name:JOHN LENARD SMITH

最後に、LowerCaseTokenizerFactorytext_wsフィールドに追加して、用語がインデックスに登録され、小文字で検索されるようにすることをお勧めします。そうしないと、大文字と小文字がJohn * Smith異なるため、検索が一致しません。

于 2013-02-20T19:17:12.067 に答える
-1

ユーザーに 3 つの別々のフィールドに名前を入力してもらいます。結果を連結します。空白がある場合は、ワイルドカードに置き換えます。

于 2013-02-20T18:36:34.560 に答える