Faça deleite lucene todos os termos em um campo como um único termo

StackOverflow https://stackoverflow.com/questions/606576

  •  03-07-2019
  •  | 
  •  

Pergunta

Em meus documentos Lucene Eu tenho uma "empresa" campo onde o nome da empresa é separado em tokens. Eu preciso o uso de token para uma determinada parte da minha aplicação. Mas para esta consulta, eu preciso ser capaz de criar um PrefixQuery em todo o campo empresa.

Exemplo:

  • O meu Marca
    • minha
    • marca
  • fazenda brahmin
    • brahmin
    • fazenda

regularmente consultando "bra" retornaria ambos os documentos porque ambos têm um termo começando com sutiã.
O resultado que eu quero, porém, só voltaria a última entrada, porque as primeiras partidas prazo com sutiã.

Todas as sugestões?

Foi útil?

Solução

Use a SpanQuery apenas para procurar a posição primeiro mandato. A PrefixQuery envolto por SpanMultiTermQueryWrapper envolto por SpanPositionRangeQuery:

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>

Outras dicas

Criar outro campo indexado, onde o nome da empresa é não tokenized. Quando necessário, pesquisa nesse campo, em vez do campo nome da empresa tokenized.


Se você quiser pesquisas rápidas, você precisa ter entradas de índice que apontam diretamente para os registros de interesse. Não pode ser algo que você pode para com os dados de proximidade para filtrar registros, mas será lento. Eu vejo o problema como: como pode um "contém" consulta sobre um campo completo ser realizada de forma eficiente

Você pode ser capaz de minimizar o aumento no tamanho do índice criando (para cada corrente de campo) um campo "primeiro mandato" e no campo "termos restantes". Isso eliminaria a duplicação do primeiro mandato em dois campos. Para consultas "normais", você olhar para os termos da consulta em qualquer um desses campos. Para consultas "startsWith", você procura apenas o campo "primeiro mandato". Mas este parece ser mais problemas do que vale a pena.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top