Add AND multi keyword search

This commit is contained in:
MartinBraquet
2025-08-05 02:18:37 +02:00
parent 4aa23cf755
commit 2a043dbd53
2 changed files with 79 additions and 74 deletions

View File

@@ -14,7 +14,7 @@ export async function GET(request: Request) {
const coreValues = url.searchParams.get("coreValues")?.split(",").filter(Boolean) || [];
const causeAreas = url.searchParams.get("causeAreas")?.split(",").filter(Boolean) || [];
const connections = url.searchParams.get("connections")?.split(",").filter(Boolean) || [];
const searchQuery = url.searchParams.get("searchQuery") || "";
const searchQueries = url.searchParams.get("searchQuery")?.split(",").map(q => q.trim()).filter(Boolean) || [];
const profilesPerPage = 100;
const offset = (page - 1) * profilesPerPage;
@@ -145,94 +145,99 @@ export async function GET(request: Request) {
};
}
if (searchQuery) {
where.OR = [
...(where.OR ?? []),
{name: {contains: searchQuery, mode: 'insensitive'}},
// {email: {contains: searchQuery, mode: 'insensitive'}},
{
profile: {
description: {contains: searchQuery, mode: 'insensitive'},
},
},
{
profile: {
occupation: {contains: searchQuery, mode: 'insensitive'},
},
},
{
profile: {
location: {contains: searchQuery, mode: 'insensitive'},
},
},
{
profile: {
contactInfo: {contains: searchQuery, mode: 'insensitive'},
},
},
{
profile: {
intellectualInterests: {
some: {
interest: {
name: {contains: searchQuery, mode: "insensitive"},
if (searchQueries.length > 0) {
where.AND = [
...(where.AND ?? []),
...searchQueries.map(query => ({
OR: [
{name: {contains: query, mode: 'insensitive'}},
// {email: {contains: searchQuery, mode: 'insensitive'}},
{
profile: {
description: {contains: query, mode: 'insensitive'},
},
},
{
profile: {
occupation: {contains: query, mode: 'insensitive'},
},
},
{
profile: {
location: {contains: query, mode: 'insensitive'},
},
},
{
profile: {
contactInfo: {contains: query, mode: 'insensitive'},
},
},
{
profile: {
intellectualInterests: {
some: {
interest: {
name: {contains: query, mode: "insensitive"},
},
},
},
},
},
},
},
{
profile: {
coreValues: {
some: {
value: {
name: {contains: searchQuery, mode: "insensitive"},
{
profile: {
coreValues: {
some: {
value: {
name: {contains: query, mode: "insensitive"},
},
},
},
},
},
},
},
{
profile: {
causeAreas: {
some: {
causeArea: {
name: {contains: searchQuery, mode: "insensitive"},
{
profile: {
causeAreas: {
some: {
causeArea: {
name: {contains: query, mode: "insensitive"},
},
},
},
},
},
},
},
{
profile: {
desiredConnections: {
some: {
connection: {
name: {contains: searchQuery, mode: "insensitive"},
{
profile: {
desiredConnections: {
some: {
connection: {
name: {contains: query, mode: "insensitive"},
},
},
},
},
},
},
},
{
profile: {
promptAnswers: {
some: {
answer: {contains: searchQuery, mode: "insensitive"},
{
profile: {
promptAnswers: {
some: {
answer: {contains: query, mode: "insensitive"},
},
},
},
},
},
},
{
profile: {
promptAnswers: {
some: {
prompt: {contains: searchQuery, mode: "insensitive"},
{
profile: {
promptAnswers: {
some: {
prompt: {contains: query, mode: "insensitive"},
},
},
},
},
},
},
];
]
}))
]
}
console.log(where.profile);

View File

@@ -201,7 +201,7 @@ export default function ProfilePage() {
<div className="relative">
<input
type="text"
placeholder='Try "meditation", "hiking", or "chess"'
placeholder='Try "meditation", "hiking", or multiple words like "writing, nature"'
className="w-full pl-10 pr-10 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
value={text}
onChange={(e) => setText(e.target.value)}