Rpj
Rpj

Reputation: 6080

Search results for term query not in alphabetical sort order

My results for the following term query gets rendered like this. But we would want the search results where "BC" appears after "Bar", since we are trying to perform a alphabetical search. What should be done to get this working

Adam
Buck
BC
Bar
Car
Far
NativeSearchQuery query = new NativeSearchQueryBuilder()
    .withSourceFilter(new FetchSourceFilterBuilder().withIncludes().build())
    .withQuery(QueryBuilders.termQuery("type", field))
    .withSort(new FieldSortBuilder("name").order(SortOrder.ASC))
    .withPageable(pageable).build();

Upvotes: 1

Views: 190

Answers (1)

Bhavya
Bhavya

Reputation: 16172

To sort the result in alphabetical order you can define a normalizer with a lowercase filter, lowercase filter will ensure that all the letters are changed to lowercase before indexing the document and searching.

Modify your index mapping as

{
  "settings": {
    "analysis": {
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "normalizer": "my_normalizer"
      }
    }
  }
}

Indexed the same sample documents as given in the question.

Search Query:

{
  "sort":{
    "name":{
      "order":"asc"
    }
  }
}

Search Result:

"hits": [
      {
        "_index": "66064809",
        "_type": "_doc",
        "_id": "1",
        "_score": null,
        "_source": {
          "name": "Adam"
        },
        "sort": [
          "adam"
        ]
      },
      {
        "_index": "66064809",
        "_type": "_doc",
        "_id": "4",
        "_score": null,
        "_source": {
          "name": "Bar"
        },
        "sort": [
          "bar"
        ]
      },
      {
        "_index": "66064809",
        "_type": "_doc",
        "_id": "3",
        "_score": null,
        "_source": {
          "name": "BC"
        },
        "sort": [
          "bc"
        ]
      },
      {
        "_index": "66064809",
        "_type": "_doc",
        "_id": "2",
        "_score": null,
        "_source": {
          "name": "Buck"
        },
        "sort": [
          "buck"
        ]
      },
      {
        "_index": "66064809",
        "_type": "_doc",
        "_id": "5",
        "_score": null,
        "_source": {
          "name": "Car"
        },
        "sort": [
          "car"
        ]
      },
      {
        "_index": "66064809",
        "_type": "_doc",
        "_id": "6",
        "_score": null,
        "_source": {
          "name": "Far"
        },
        "sort": [
          "far"
        ]
      }
    ]
  }

Upvotes: 1

Related Questions