mirror of
https://github.com/valitydev/deanonimus.git
synced 2024-11-06 02:05:16 +00:00
OPS-408: fix searchShopText (#52)
* OPS-408: fix searchShopText * fix setUp()
This commit is contained in:
parent
8c6b7299e1
commit
03fffdd027
@ -1,6 +1,7 @@
|
||||
package dev.vality.deanonimus.converter;
|
||||
|
||||
import dev.vality.damsel.deanonimus.SearchShopHit;
|
||||
import dev.vality.damsel.deanonimus.Shop;
|
||||
import dev.vality.deanonimus.domain.Party;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.opensearch.client.opensearch.core.SearchResponse;
|
||||
@ -8,6 +9,7 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.containsIgnoreCase;
|
||||
|
||||
@ -21,14 +23,40 @@ public class SearchHitShopConverter {
|
||||
public List<SearchShopHit> convert(SearchResponse<Party> searchHits, String text) {
|
||||
var hits = new ArrayList<SearchShopHit>();
|
||||
for (var searchHit : searchHits.hits().hits()) {
|
||||
hits.addAll(shopListConverter.convert(searchHit.source().getShops()).values()
|
||||
.stream()
|
||||
.filter(shop -> containsIgnoreCase(shop.getId(), text)
|
||||
|| containsIgnoreCase(shop.getLocation().getUrl(), text)
|
||||
|| containsIgnoreCase(shop.getDetails().getName(), text))
|
||||
.map(shop -> new SearchShopHit(searchHit.score(), shop, partyConverter.convert(searchHit.source())))
|
||||
.toList());
|
||||
var shops = searchHit.source().getShops();
|
||||
if (isContainCommonFields(searchHit.source(), text)) {
|
||||
hits.addAll(shopListConverter.convert(shops).values()
|
||||
.stream()
|
||||
.map(shop ->
|
||||
new SearchShopHit(searchHit.score(), shop, partyConverter.convert(searchHit.source())))
|
||||
.toList());
|
||||
} else {
|
||||
hits.addAll(shopListConverter.convert(shops).values()
|
||||
.stream()
|
||||
.filter(shop -> filterByShopFields(shop, text))
|
||||
.map(shop ->
|
||||
new SearchShopHit(searchHit.score(), shop, partyConverter.convert(searchHit.source())))
|
||||
.toList());
|
||||
}
|
||||
}
|
||||
return hits;
|
||||
}
|
||||
|
||||
private boolean filterByShopFields(Shop shop, String text) {
|
||||
return containsIgnoreCase(shop.getId(), text)
|
||||
|| containsIgnoreCase(shop.getLocation().getUrl(), text)
|
||||
|| containsIgnoreCase(shop.getDetails().getName(), text)
|
||||
|| containsIgnoreCase(shop.getDetails().getDescription(), text)
|
||||
|| containsIgnoreCase(shop.getContractId(), text);
|
||||
}
|
||||
|
||||
private boolean isContainCommonFields(Party party, String text) {
|
||||
var contracts = Optional.ofNullable(party.getContracts());
|
||||
var contractors = Optional.ofNullable(party.getContractors());
|
||||
return containsIgnoreCase(party.getId(), text)
|
||||
|| containsIgnoreCase(party.getEmail(), text)
|
||||
|| contracts.map(list -> list.stream().anyMatch(e -> containsIgnoreCase(e.getId(), text))).orElse(false)
|
||||
|| contractors.map(list ->
|
||||
list.stream().anyMatch(e -> containsIgnoreCase(e.getId(), text))).orElse(false);
|
||||
}
|
||||
}
|
||||
|
82
src/main/java/dev/vality/deanonimus/db/SearchByShopDao.java
Normal file
82
src/main/java/dev/vality/deanonimus/db/SearchByShopDao.java
Normal file
@ -0,0 +1,82 @@
|
||||
package dev.vality.deanonimus.db;
|
||||
|
||||
import dev.vality.deanonimus.domain.Party;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.opensearch.client.opensearch.OpenSearchClient;
|
||||
import org.opensearch.client.opensearch._types.query_dsl.*;
|
||||
import org.opensearch.client.opensearch.core.SearchResponse;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class SearchByShopDao implements SearchDao {
|
||||
|
||||
|
||||
@Value("${data.response.limit}")
|
||||
private Integer responseLimit;
|
||||
|
||||
private final OpenSearchClient openSearchClient;
|
||||
|
||||
@Override
|
||||
public SearchResponse<Party> searchParty(String text) {
|
||||
var queryBuilder = new BoolQuery.Builder()
|
||||
.should(searchBestFields(text, keywords()),
|
||||
searchPhrasePrefix(text, fields()))
|
||||
.build();
|
||||
return search(queryBuilder);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private SearchResponse<Party> search(BoolQuery queryBuilder) {
|
||||
return openSearchClient.search(
|
||||
s -> s
|
||||
.size(responseLimit)
|
||||
.query(new Query.Builder()
|
||||
.bool(queryBuilder)
|
||||
.build()),
|
||||
Party.class);
|
||||
}
|
||||
|
||||
private List<String> keywords() {
|
||||
return List.of(
|
||||
"id.keyword",
|
||||
"shops.id.keyword",
|
||||
"contractors.id.keyword",
|
||||
"contracts.id.keyword");
|
||||
}
|
||||
|
||||
private List<String> fields() {
|
||||
return List.of(
|
||||
"id",
|
||||
"email",
|
||||
"shops.id",
|
||||
"shops.locationUrl",
|
||||
"shops.detailsName",
|
||||
"shops.contractId",
|
||||
"shops.detailsDescription");
|
||||
}
|
||||
|
||||
private Query searchBestFields(String text, List<String> fields) {
|
||||
return new Query(new MultiMatchQuery.Builder()
|
||||
.fields(fields)
|
||||
.query(text)
|
||||
.type(TextQueryType.BestFields)
|
||||
.operator(Operator.Or)
|
||||
.build());
|
||||
}
|
||||
|
||||
private Query searchPhrasePrefix(String text, List<String> fields) {
|
||||
return new Query(new MultiMatchQuery.Builder()
|
||||
.fields(fields)
|
||||
.query(text)
|
||||
.type(TextQueryType.PhrasePrefix)
|
||||
.operator(Operator.Or)
|
||||
.build());
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ import java.util.Optional;
|
||||
@Setting(settingPath = "/settings/autocomplete-analyzer.json")
|
||||
public class Party {
|
||||
@Id
|
||||
@Field(type = FieldType.Keyword)
|
||||
@Field(type = FieldType.Text, analyzer = "autocomplete", searchAnalyzer = "standard")
|
||||
private String id;
|
||||
@Field(type = FieldType.Text, analyzer = "autocomplete", searchAnalyzer = "standard")
|
||||
private String email;
|
||||
|
@ -14,7 +14,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class Shop {
|
||||
@Field(type = FieldType.Keyword)
|
||||
@Field(type = FieldType.Text, analyzer = "autocomplete", searchAnalyzer = "standard")
|
||||
private String id;
|
||||
private Blocking blocking;
|
||||
private Suspension suspension;
|
||||
|
@ -7,7 +7,8 @@ import dev.vality.damsel.deanonimus.SearchWalletHit;
|
||||
import dev.vality.deanonimus.converter.SearchHitConverter;
|
||||
import dev.vality.deanonimus.converter.SearchHitShopConverter;
|
||||
import dev.vality.deanonimus.converter.SearchHitWalletConverter;
|
||||
import dev.vality.deanonimus.db.SearchDao;
|
||||
import dev.vality.deanonimus.db.SearchByShopDao;
|
||||
import dev.vality.deanonimus.db.SearchDaoImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.opensearch.client.opensearch.core.search.Hit;
|
||||
@ -25,7 +26,8 @@ public class DeanonimusServiceHandler implements DeanonimusSrv.Iface {
|
||||
private final SearchHitConverter searchHitConverter;
|
||||
private final SearchHitShopConverter searchHitShopConverter;
|
||||
private final SearchHitWalletConverter searchHitWalletConverter;
|
||||
private final SearchDao searchDao;
|
||||
private final SearchDaoImpl searchDao;
|
||||
private final SearchByShopDao searchByShopDao;
|
||||
|
||||
@Override
|
||||
public List<SearchHit> searchParty(String text) {
|
||||
@ -43,7 +45,7 @@ public class DeanonimusServiceHandler implements DeanonimusSrv.Iface {
|
||||
@Override
|
||||
public List<SearchShopHit> searchShopText(String text) {
|
||||
log.info("Incoming request for shop with text: {}", text);
|
||||
var searchHits = searchDao.searchParty(text);
|
||||
var searchHits = searchByShopDao.searchParty(text);
|
||||
var parties = searchHits.hits().hits().stream().map(Hit::source).collect(toList());
|
||||
log.debug("Found for shop search parties: {}", parties);
|
||||
log.info("Found for shop search parties: {}", parties.size());
|
||||
|
@ -23,7 +23,7 @@ import java.util.Map;
|
||||
@Slf4j
|
||||
@ExtendWith({KafkaContainerExtension.class, OpensearchContainerExtension.class})
|
||||
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
|
||||
@SpringBootTest
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
public abstract class AbstractIntegrationTest {
|
||||
|
||||
private static final String TOPIC_NAME = "mg-events-party";
|
||||
|
@ -4,6 +4,7 @@ import dev.vality.damsel.deanonimus.SearchHit;
|
||||
import dev.vality.damsel.deanonimus.SearchShopHit;
|
||||
import dev.vality.damsel.deanonimus.SearchWalletHit;
|
||||
import dev.vality.deanonimus.domain.Party;
|
||||
import dev.vality.deanonimus.extension.OpensearchContainerExtension;
|
||||
import dev.vality.deanonimus.handler.DeanonimusServiceHandler;
|
||||
import dev.vality.deanonimus.service.OpenSearchService;
|
||||
import lombok.SneakyThrows;
|
||||
@ -15,9 +16,12 @@ import org.opensearch.client.opensearch.indices.DeleteIndexRequest;
|
||||
import org.opensearch.client.opensearch.indices.ExistsRequest;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import static dev.vality.deanonimus.constant.OpenSearchConstants.PARTY_INDEX;
|
||||
@ -28,6 +32,9 @@ public class ReadTest extends AbstractIntegrationTest {
|
||||
@Value("${data.response.limit}")
|
||||
Integer responseLimit;
|
||||
|
||||
@Value("classpath:index_request.json")
|
||||
Resource indexModel;
|
||||
|
||||
@Autowired
|
||||
OpenSearchService openSearchService;
|
||||
|
||||
@ -37,6 +44,10 @@ public class ReadTest extends AbstractIntegrationTest {
|
||||
@Autowired
|
||||
DeanonimusServiceHandler deanonimusServiceHandler;
|
||||
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
|
||||
private static final String PARTY = "party";
|
||||
private static final String SHOP = "shop";
|
||||
private static final String EMAIL = "email@mail.com";
|
||||
@ -54,6 +65,7 @@ public class ReadTest extends AbstractIntegrationTest {
|
||||
if (indices.exists(new ExistsRequest.Builder().index(PARTY_INDEX).build()).value()) {
|
||||
indices.delete(new DeleteIndexRequest.Builder().index(PARTY_INDEX).build());
|
||||
}
|
||||
createIndex();
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -167,6 +179,108 @@ public class ReadTest extends AbstractIntegrationTest {
|
||||
.anyMatch(shop -> shop.getDetails().getName().contains("S2P"))));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByShopNames() {
|
||||
var party1 = givenParty(PARTY + "id-1", EMAIL);
|
||||
givenShop(party1, SHOP + "id-1", URL, "S2P_BRL");
|
||||
|
||||
var party2 = givenParty(PARTY + "id-2", EMAIL);
|
||||
givenShop(party2, SHOP + "id-2", URL, "S2P_BRL");
|
||||
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText("s2p");
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(2, searchHits.size());
|
||||
var expected = Set.of(SHOP + "id-1", SHOP + "id-2");
|
||||
assertTrue(searchHits.stream().allMatch(shopHit -> expected.contains(shopHit.getShop().getId())));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByPartyId() {
|
||||
var party = givenParty(PARTY, EMAIL);
|
||||
givenShop(party, SHOP, URL, "S2P_BRL");
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText(PARTY);
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(1, searchHits.size());
|
||||
assertTrue(searchHits.stream().anyMatch(shopHit -> shopHit.getParty().getId().equals(PARTY)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextContainsPartyId() {
|
||||
var party = givenParty("party-test-1", EMAIL);
|
||||
givenShop(party, SHOP, URL, "S2P_BRL");
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText("test");
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(1, searchHits.size());
|
||||
assertTrue(searchHits.stream().anyMatch(shopHit -> shopHit.getParty().getId().equals("party-test-1")));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByContractorId() {
|
||||
var party = givenParty(PARTY, EMAIL);
|
||||
givenShop(party, SHOP, URL, "S2P_BRL");
|
||||
givenRegisteredUserContractor(party, CONTRACTOR, EMAIL);
|
||||
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText(CONTRACTOR);
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(1, searchHits.size());
|
||||
assertTrue(searchHits.stream().anyMatch(shopHit -> shopHit.getShop().getId().equals(SHOP)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByContractId() {
|
||||
var party = givenParty(PARTY, EMAIL);
|
||||
givenShop(party, SHOP, URL, "S2P_BRL");
|
||||
givenContract(party, CONTRACT, 123, "ДГ-123432", "Василий Пупкин");
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText(PARTY);
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(1, searchHits.size());
|
||||
assertTrue(searchHits.stream().anyMatch(shopHit -> shopHit.getShop().getId().equals(SHOP)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByEmail() {
|
||||
var party = givenParty(PARTY, EMAIL);
|
||||
givenShop(party, SHOP, URL, "S2P_BRL");
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText(EMAIL);
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(1, searchHits.size());
|
||||
assertTrue(searchHits.stream().anyMatch(shopHit -> shopHit.getShop().getId().equals(SHOP)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByPartyIdAndShopId() {
|
||||
|
||||
var party1 = givenParty("party-test-1", EMAIL);
|
||||
givenShop(party1, "shop-id-1", URL, "S2P_BRL-1");
|
||||
givenShop(party1, "shop-id-2", URL, "S2P_BRL-2");
|
||||
|
||||
var party2 = givenParty("party-id-2", EMAIL);
|
||||
givenShop(party2, "shop-test-1", URL, "details-1");
|
||||
givenShop(party2, "shop-none-2", URL, "details-2");
|
||||
|
||||
|
||||
refreshIndices();
|
||||
var searchHits = deanonimusServiceHandler.searchShopText("test");
|
||||
|
||||
assertFalse(searchHits.isEmpty());
|
||||
assertEquals(3, searchHits.size());
|
||||
|
||||
var expected = Set.of("shop-id-1", "shop-id-2", "shop-test-1");
|
||||
assertTrue(searchHits.stream().allMatch(shopHit -> expected.contains(shopHit.getShop().getId())));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByDiffShop() throws TException {
|
||||
Party party = givenParty(PARTY, EMAIL);
|
||||
@ -195,6 +309,25 @@ public class ReadTest extends AbstractIntegrationTest {
|
||||
.anyMatch(partySearchHit -> partySearchHit.getShop().getId().equals(SHOP)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextContainsShopIds() {
|
||||
Party party1 = givenParty(PARTY + "id-1", EMAIL);
|
||||
givenShop(party1, "test-id-1", URL);
|
||||
|
||||
Party party2 = givenParty(PARTY + "id-2", EMAIL);
|
||||
givenShop(party2, "test-id-2", URL);
|
||||
|
||||
refreshIndices();
|
||||
|
||||
List<SearchShopHit> searchShopHits = deanonimusServiceHandler.searchShopText("test");
|
||||
|
||||
assertFalse(searchShopHits.isEmpty());
|
||||
assertEquals(2, searchShopHits.size());
|
||||
|
||||
var expected = Set.of("test-id-1", "test-id-2");
|
||||
assertTrue(searchShopHits.stream().allMatch(shopHit -> expected.contains(shopHit.getShop().getId())));
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchShopTextByShopUrl() throws TException {
|
||||
Party party = givenParty(PARTY, EMAIL);
|
||||
@ -471,4 +604,12 @@ public class ReadTest extends AbstractIntegrationTest {
|
||||
private void refreshIndices() {
|
||||
client.indices().refresh();
|
||||
}
|
||||
|
||||
private void createIndex() {
|
||||
var url = "http://" +
|
||||
OpensearchContainerExtension.OPENSEARCH.getHost() + ":" +
|
||||
OpensearchContainerExtension.OPENSEARCH.getFirstMappedPort() + "/" +
|
||||
PARTY_INDEX;
|
||||
restTemplate.put(url, indexModel);
|
||||
}
|
||||
}
|
||||
|
@ -1,371 +0,0 @@
|
||||
{
|
||||
"party": {
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"blocking": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"contractors": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityActualAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityLegalName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityRegisteredAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityRegisteredNumber": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityTradingName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"legalEntity": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"partyId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"registeredUserEmail": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityActualAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityInn": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityPostAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRegisteredName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRegisteredNumber": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankAccount": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankBik": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankPostAccount": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"contracts": {
|
||||
"properties": {
|
||||
"contractorId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"legalAgreementId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"partyId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"paymentInstitutionId": {
|
||||
"type": "long"
|
||||
},
|
||||
"status": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"termsId": {
|
||||
"type": "long"
|
||||
}
|
||||
}
|
||||
},
|
||||
"email": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"shops": {
|
||||
"properties": {
|
||||
"accountCurrencyCode": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"accountGuarantee": {
|
||||
"type": "long"
|
||||
},
|
||||
"accountPayout": {
|
||||
"type": "long"
|
||||
},
|
||||
"accountSettlement": {
|
||||
"type": "long"
|
||||
},
|
||||
"blocking": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"categoryId": {
|
||||
"type": "long"
|
||||
},
|
||||
"contractId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"detailsDescription": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"detailsName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"locationUrl": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"payoutToolId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"suspension": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"suspension": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
375
src/test/resources/index_request.json
Normal file
375
src/test/resources/index_request.json
Normal file
@ -0,0 +1,375 @@
|
||||
{
|
||||
"settings": {
|
||||
"index": {
|
||||
"number_of_shards": 2,
|
||||
"number_of_replicas": 1
|
||||
}
|
||||
},
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"blocking": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"contractors": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityActualAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityLegalName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityRegisteredAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityRegisteredNumber": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"internationalLegalEntityTradingName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"legalEntity": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"partyId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"registeredUserEmail": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityActualAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityInn": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityPostAddress": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRegisteredName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRegisteredNumber": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankAccount": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankBik": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"russianLegalEntityRussianBankPostAccount": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"contracts": {
|
||||
"properties": {
|
||||
"contractorId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"legalAgreementId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"partyId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"paymentInstitutionId": {
|
||||
"type": "long"
|
||||
},
|
||||
"status": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"termsId": {
|
||||
"type": "long"
|
||||
}
|
||||
}
|
||||
},
|
||||
"email": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"shops": {
|
||||
"properties": {
|
||||
"accountCurrencyCode": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"accountGuarantee": {
|
||||
"type": "long"
|
||||
},
|
||||
"accountPayout": {
|
||||
"type": "long"
|
||||
},
|
||||
"accountSettlement": {
|
||||
"type": "long"
|
||||
},
|
||||
"blocking": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"categoryId": {
|
||||
"type": "long"
|
||||
},
|
||||
"contractId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"detailsDescription": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"detailsName": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"locationUrl": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"payoutToolId": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"suspension": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"suspension": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user