/ / Jak sprawić, aby Solr nie rozróżniał między „Johnem” a „JOHN” - solr

Jak sprawić, by Solr nie rozróżniał między "Johnem" a "JOHNEM" - solr

w solr muszę uzyskać unikalne wartości w polu „nazwa” mojej bazy danych.

z tego powodu czytam o grupowaniu i uzyskuję pożądany rezultat

{
"responseHeader":{
"status":0,
"QTime":16,
"params":{
"indent":"true",
"q":"name:И*",
"group.field":"name",
"group":"true",
"wt":"json"}},
"grouped":{
"name":{
"matches":2231,
"groups":[{
"groupValue":"ИВАН",
"doclist":{"numFound":1144,"start":0,"docs":[
{
"obshtina":"ПЛОВДИВ",
"phone":"032/670309",
"timestamp":"2013-03-04T08:43:53.553Z"}]
}},
{
"groupValue":"ИЛИЯ",
"doclist":{"numFound":177,"start":0,"docs":[
{
"obshtina":"БРЕЗОВО",
"phone":"(3191)2265",
..............................

Problem polega na tym, że teraz to zauważyłemniestety mam 2 grupy, które są w rzeczywistości tymi samymi „Иван” i „ИВАН”. Problemem jest to, że moje pole „name” powinno być typu ciąg, aby móc używać znaków wieloznacznych, których potrzebuję, więc nie mogę utworzyć napisz na przykład tekst i użyj filtru LowerCase

Odpowiedzi:

3 dla odpowiedzi № 1

Możesz użyć KeywordTokenizerFactory (który absolutnie nie tokenizacji, podobnie jak pole ciągu) wraz z LowerCaseFilterFactory aby dostać to, co chcesz.

Nadal będziesz mógł wyszukiwać za pomocą symboli wieloznacznych.


2 dla odpowiedzi nr 2

Dodając do poprzedniej odpowiedzi, możesz użyć nowejWpisz tekst Solr jak poniżej. W czasie indeksu po prostu przechowuj wartość jako pojedynczy token małymi literami. Podczas wyszukiwania po prostu rozważ szukany tekst jako pojedynczy token małymi literami. W ten sposób można uzyskać pożądany efekt.

      <fieldType name="lcase" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer  type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>